From 0d372fb878fe5ae5404b4447fe6055cb129f3b8c Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Sun, 3 Mar 2013 21:50:29 -0500 Subject: [PATCH] Modify old formatter to match rocket's formatting style --- nilmdb/server/layout.pyx | 8 ++++++-- nilmdb/server/pyrocket.py | 2 +- tests/test_layout.py | 14 ++++++++------ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/nilmdb/server/layout.pyx b/nilmdb/server/layout.pyx index aa6995c..ad18754 100644 --- a/nilmdb/server/layout.pyx +++ b/nilmdb/server/layout.pyx @@ -43,9 +43,13 @@ class Layout: self.parse = self.parse_uint16 self.format_str = "%.6f" + " %d" * self.count self.format = self.format_generic - elif datatype == 'float32' or datatype == 'float64': + elif datatype == 'float32': self.parse = self.parse_float64 - self.format_str = "%.6f" + " %f" * self.count + self.format_str = "%.6f" + " %.6e" * self.count + self.format = self.format_generic + elif datatype == 'float64': + self.parse = self.parse_float64 + self.format_str = "%.6f" + " %.16e" * self.count self.format = self.format_generic else: raise KeyError("invalid type") diff --git a/nilmdb/server/pyrocket.py b/nilmdb/server/pyrocket.py index 9663ec9..a718d01 100644 --- a/nilmdb/server/pyrocket.py +++ b/nilmdb/server/pyrocket.py @@ -2,7 +2,7 @@ # This interface translates between the binary format on disk # and the ASCII format used when communicating with clients. -# This is slow! +# This is slow! Use the C version instead. import struct import layout as _layout diff --git a/tests/test_layout.py b/tests/test_layout.py index 311fc9d..5ebe29e 100644 --- a/tests/test_layout.py +++ b/tests/test_layout.py @@ -151,10 +151,12 @@ class TestLayouts(object): [ 1234567890.100000, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 ] ] text = formatter.format(data) eq_(text, - "1234567890.000000 1.100000 2.200000 3.300000 4.400000 " + - "5.500000 6.600000 7.700000 8.800000\n" + - "1234567890.100000 1.100000 2.200000 3.300000 4.400000 " + - "5.500000 6.600000 7.700000 8.800000\n") + "1234567890.000000 1.100000e+00 2.200000e+00 3.300000e+00 " + "4.400000e+00 5.500000e+00 6.600000e+00 7.700000e+00 " + "8.800000e+00\n" + + "1234567890.100000 1.100000e+00 2.200000e+00 3.300000e+00 " + "4.400000e+00 5.500000e+00 6.600000e+00 7.700000e+00 " + "8.800000e+00\n") # try uint16_6 too formatter = Formatter(name_raw) @@ -208,7 +210,7 @@ class TestLayouts(object): eq_(parser1.data, parser2.data) def datagen(): - return [ sprintf("%f", random.uniform(-1000,1000)) + return [ sprintf("%.6e", random.uniform(-1000,1000)) for x in range(8) ] do_roundtrip(name_prep, datagen) @@ -256,7 +258,7 @@ class TestLayoutSpeed: print "" def datagen(): - return [ sprintf("%f", random.uniform(-1000,1000)) + return [ sprintf("%.6e", random.uniform(-1000,1000)) for x in range(10) ] do_speedtest("float32_10", datagen)