diff --git a/.travis.yml b/.travis.yml index 646283f..dc9f5c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ addons: script: - eclint check * */* */cunit/* + - ./tools/build-install.sh # test compilation without lazperf - ./tools/build-install.sh --with-lazperf=/usr/local && make check && ./tools/valgrind.sh - make installcheck || { cat pgsql/regression.diffs && false; } - (cd tools/benchmark_compression && sh compression_benchmark.sh) diff --git a/lib/cunit/cu_pc_patch.c b/lib/cunit/cu_pc_patch.c index 68ea7bf..f4fb5eb 100644 --- a/lib/cunit/cu_pc_patch.c +++ b/lib/cunit/cu_pc_patch.c @@ -913,6 +913,7 @@ test_patch_range_compression_none_with_out_of_bounds_first() test_patch_range_compression_none_with_bad_arguments(21, 1); } +#ifdef HAVE_LAZPERF static void test_patch_range_compression_lazperf() { @@ -947,6 +948,7 @@ test_patch_range_compression_lazperf() pc_patch_free(pa); pc_pointlist_free(pl); } +#endif /* HAVE_LAZPERF */ static void test_patch_range_compression_dimensional(enum DIMCOMPRESSIONS dimcomp) diff --git a/pgsql/expected/pointcloud-laz.out b/pgsql/expected/pointcloud-laz.out index 33d2749..7882610 100644 --- a/pgsql/expected/pointcloud-laz.out +++ b/pgsql/expected/pointcloud-laz.out @@ -38,6 +38,39 @@ VALUES (5, 0, laz ' +) +,(10, 0, -- All (signed) interpretations, uncompressed +' + + 1 x + 1 int8_t + 0.01 + + 2 y + 2 int8_t + 0.01 + + 3 i2 + 2 int16_t + 0.01 + + 4 i4 + 4 int32_t + 0.01 + + 5 i8 + 8 int64_t + 0.01 + + 6 f4 + 4 float + 0.01 + + 7 f8 + 8 double + 0.01 + +' ); CREATE TABLE IF NOT EXISTS pa_test_laz ( id SERIAL, @@ -373,4 +406,115 @@ SELECT pc_astext(PC_PointN(pa, 2)) FROM pa_test_laz; {"pcid":5,"pt":[2,1.9,0.34,10]} (1 row) +WITH points AS ( + SELECT ARRAY[ + (2^08/256.0*v)*0.01, -- int8_t + -(2^08/256.0*v)*0.01, -- int8_t + (2^16/256.0*v)*0.01, -- int16_t + (2^32/256.0*v)*0.01, -- int32_t + (2^64/256.0*v)*0.01, -- int64_t + (2^32/256.0*v)*0.01, -- float + (2^64/256.0*v)*0.01 -- double + ] a, v/16 v + FROM generate_series(-127,127,4) v +), p1 AS ( + SELECT v, PC_Patch(PC_MakePoint(10, a)) p from points -- uncompressed + GROUP BY v +) +SELECT 'compr' test, + p1.v, compr, sc, + PC_AsText(p1.p) = + PC_AsText(PC_Compress(p1.p, compr, + array_to_string( + array_fill(sc,ARRAY[7]), + ',' + ) + )) ok +FROM p1, ( values + ('dimensional','rle'), + ('dimensional','zlib'), + ('dimensional','sigbits'), + ('dimensional','auto'), + ('laz', 'null') +) dimcompr(compr,sc) +ORDER BY compr,sc,v; + test | v | compr | sc | ok +-------+----+-------------+---------+---- + compr | -7 | dimensional | auto | t + compr | -6 | dimensional | auto | t + compr | -5 | dimensional | auto | t + compr | -4 | dimensional | auto | t + compr | -3 | dimensional | auto | t + compr | -2 | dimensional | auto | t + compr | -1 | dimensional | auto | t + compr | 0 | dimensional | auto | t + compr | 1 | dimensional | auto | t + compr | 2 | dimensional | auto | t + compr | 3 | dimensional | auto | t + compr | 4 | dimensional | auto | t + compr | 5 | dimensional | auto | t + compr | 6 | dimensional | auto | t + compr | 7 | dimensional | auto | t + compr | -7 | dimensional | rle | t + compr | -6 | dimensional | rle | t + compr | -5 | dimensional | rle | t + compr | -4 | dimensional | rle | t + compr | -3 | dimensional | rle | t + compr | -2 | dimensional | rle | t + compr | -1 | dimensional | rle | t + compr | 0 | dimensional | rle | t + compr | 1 | dimensional | rle | t + compr | 2 | dimensional | rle | t + compr | 3 | dimensional | rle | t + compr | 4 | dimensional | rle | t + compr | 5 | dimensional | rle | t + compr | 6 | dimensional | rle | t + compr | 7 | dimensional | rle | t + compr | -7 | dimensional | sigbits | t + compr | -6 | dimensional | sigbits | t + compr | -5 | dimensional | sigbits | t + compr | -4 | dimensional | sigbits | t + compr | -3 | dimensional | sigbits | t + compr | -2 | dimensional | sigbits | t + compr | -1 | dimensional | sigbits | t + compr | 0 | dimensional | sigbits | t + compr | 1 | dimensional | sigbits | t + compr | 2 | dimensional | sigbits | t + compr | 3 | dimensional | sigbits | t + compr | 4 | dimensional | sigbits | t + compr | 5 | dimensional | sigbits | t + compr | 6 | dimensional | sigbits | t + compr | 7 | dimensional | sigbits | t + compr | -7 | dimensional | zlib | t + compr | -6 | dimensional | zlib | t + compr | -5 | dimensional | zlib | t + compr | -4 | dimensional | zlib | t + compr | -3 | dimensional | zlib | t + compr | -2 | dimensional | zlib | t + compr | -1 | dimensional | zlib | t + compr | 0 | dimensional | zlib | t + compr | 1 | dimensional | zlib | t + compr | 2 | dimensional | zlib | t + compr | 3 | dimensional | zlib | t + compr | 4 | dimensional | zlib | t + compr | 5 | dimensional | zlib | t + compr | 6 | dimensional | zlib | t + compr | 7 | dimensional | zlib | t + compr | -7 | laz | null | t + compr | -6 | laz | null | t + compr | -5 | laz | null | t + compr | -4 | laz | null | t + compr | -3 | laz | null | t + compr | -2 | laz | null | t + compr | -1 | laz | null | t + compr | 0 | laz | null | t + compr | 1 | laz | null | t + compr | 2 | laz | null | t + compr | 3 | laz | null | t + compr | 4 | laz | null | t + compr | 5 | laz | null | t + compr | 6 | laz | null | t + compr | 7 | laz | null | t +(75 rows) + TRUNCATE pointcloud_formats; diff --git a/pgsql/expected/pointcloud.out b/pgsql/expected/pointcloud.out index b8d9d1e..c851f88 100644 --- a/pgsql/expected/pointcloud.out +++ b/pgsql/expected/pointcloud.out @@ -531,8 +531,7 @@ FROM p1, ( values ('dimensional','rle'), ('dimensional','zlib'), ('dimensional','sigbits'), - ('dimensional','auto'), - ('laz','null') + ('dimensional','auto') ) dimcompr(compr,sc) ORDER BY compr,sc,v; test | v | compr | sc | ok @@ -597,22 +596,7 @@ ORDER BY compr,sc,v; compr | 5 | dimensional | zlib | t compr | 6 | dimensional | zlib | t compr | 7 | dimensional | zlib | t - compr | -7 | laz | null | t - compr | -6 | laz | null | t - compr | -5 | laz | null | t - compr | -4 | laz | null | t - compr | -3 | laz | null | t - compr | -2 | laz | null | t - compr | -1 | laz | null | t - compr | 0 | laz | null | t - compr | 1 | laz | null | t - compr | 2 | laz | null | t - compr | 3 | laz | null | t - compr | 4 | laz | null | t - compr | 5 | laz | null | t - compr | 6 | laz | null | t - compr | 7 | laz | null | t -(75 rows) +(60 rows) SELECT PC_Summary(PC_Compress(PC_Patch(PC_MakePoint(10,ARRAY[1,1,1,1,1,1,1])), 'dimensional'))::json->'compr'; diff --git a/pgsql/sql/pointcloud-laz.sql b/pgsql/sql/pointcloud-laz.sql index c196cb3..b9cd5c3 100644 --- a/pgsql/sql/pointcloud-laz.sql +++ b/pgsql/sql/pointcloud-laz.sql @@ -38,9 +38,41 @@ VALUES (5, 0, laz ' +) +,(10, 0, -- All (signed) interpretations, uncompressed +' + + 1 x + 1 int8_t + 0.01 + + 2 y + 2 int8_t + 0.01 + + 3 i2 + 2 int16_t + 0.01 + + 4 i4 + 4 int32_t + 0.01 + + 5 i8 + 8 int64_t + 0.01 + + 6 f4 + 4 float + 0.01 + + 7 f8 + 8 double + 0.01 + +' ); - CREATE TABLE IF NOT EXISTS pa_test_laz ( id SERIAL, pa PCPATCH(5) @@ -161,4 +193,37 @@ SELECT pc_astext(pc_explode(pa)) FROM pa_test_laz_multiple_dim LIMIT 20; SELECT pc_astext(PC_PointN(pa, 2)) FROM pa_test_laz; +WITH points AS ( + SELECT ARRAY[ + (2^08/256.0*v)*0.01, -- int8_t + -(2^08/256.0*v)*0.01, -- int8_t + (2^16/256.0*v)*0.01, -- int16_t + (2^32/256.0*v)*0.01, -- int32_t + (2^64/256.0*v)*0.01, -- int64_t + (2^32/256.0*v)*0.01, -- float + (2^64/256.0*v)*0.01 -- double + ] a, v/16 v + FROM generate_series(-127,127,4) v +), p1 AS ( + SELECT v, PC_Patch(PC_MakePoint(10, a)) p from points -- uncompressed + GROUP BY v +) +SELECT 'compr' test, + p1.v, compr, sc, + PC_AsText(p1.p) = + PC_AsText(PC_Compress(p1.p, compr, + array_to_string( + array_fill(sc,ARRAY[7]), + ',' + ) + )) ok +FROM p1, ( values + ('dimensional','rle'), + ('dimensional','zlib'), + ('dimensional','sigbits'), + ('dimensional','auto'), + ('laz', 'null') +) dimcompr(compr,sc) +ORDER BY compr,sc,v; + TRUNCATE pointcloud_formats; diff --git a/pgsql/sql/pointcloud.sql b/pgsql/sql/pointcloud.sql index adfeee1..696f653 100644 --- a/pgsql/sql/pointcloud.sql +++ b/pgsql/sql/pointcloud.sql @@ -364,8 +364,7 @@ FROM p1, ( values ('dimensional','rle'), ('dimensional','zlib'), ('dimensional','sigbits'), - ('dimensional','auto'), - ('laz','null') + ('dimensional','auto') ) dimcompr(compr,sc) ORDER BY compr,sc,v;