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;