From a722df9cac28f33d365f69b0c517c98aa8c3b74e Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sun, 16 Jul 2023 15:49:24 -0700 Subject: [PATCH] Test sum aggregate --- test/t/008_aggregates.pl | 48 ++++++++++++++++++++++++++++++++++++++++ test/t/008_avg.pl | 37 ------------------------------- 2 files changed, 48 insertions(+), 37 deletions(-) create mode 100644 test/t/008_aggregates.pl delete mode 100644 test/t/008_avg.pl diff --git a/test/t/008_aggregates.pl b/test/t/008_aggregates.pl new file mode 100644 index 0000000..5313c41 --- /dev/null +++ b/test/t/008_aggregates.pl @@ -0,0 +1,48 @@ +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More; + +# Initialize node +my $node = get_new_node('node'); +$node->init; +$node->start; + +# Create table +$node->safe_psql("postgres", "CREATE EXTENSION vector;"); +$node->safe_psql("postgres", "CREATE TABLE tst (r1 real, r2 real, r3 real, v vector(3));"); +$node->safe_psql("postgres", qq( + INSERT INTO tst SELECT r1, r2, r3, ARRAY[r1, r2, r3] FROM ( + SELECT random() + 1.01 AS r1, random() + 2.01 AS r2, random() + 3.01 AS r3 FROM generate_series(1, 1000000) t + ) i; +)); + +sub test_aggregate +{ + my ($agg) = @_; + + # Test value + my $res = $node->safe_psql("postgres", "SELECT $agg(v) FROM tst;"); + like($res, qr/\[1\.5/); + like($res, qr/,2\.5/); + like($res, qr/,3\.5/); + + # Test matches real + # TODO test sum + if ($agg eq 'avg') { + my $r1 = $node->safe_psql("postgres", "SELECT $agg(r1)::float4 FROM tst;"); + my $r2 = $node->safe_psql("postgres", "SELECT $agg(r2)::float4 FROM tst;"); + my $r3 = $node->safe_psql("postgres", "SELECT $agg(r3)::float4 FROM tst;"); + is($res, "[$r1,$r2,$r3]"); + } + + # Test explain + my $explain = $node->safe_psql("postgres", "EXPLAIN SELECT $agg(v) FROM tst;"); + like($explain, qr/Partial Aggregate/); +} + +test_aggregate('avg'); +test_aggregate('sum'); + +done_testing(); diff --git a/test/t/008_avg.pl b/test/t/008_avg.pl deleted file mode 100644 index b036678..0000000 --- a/test/t/008_avg.pl +++ /dev/null @@ -1,37 +0,0 @@ -use strict; -use warnings; -use PostgresNode; -use TestLib; -use Test::More; - -# Initialize node -my $node = get_new_node('node'); -$node->init; -$node->start; - -# Create table -$node->safe_psql("postgres", "CREATE EXTENSION vector;"); -$node->safe_psql("postgres", "CREATE TABLE tst (r1 real, r2 real, r3 real, v vector(3));"); -$node->safe_psql("postgres", qq( - INSERT INTO tst SELECT r1, r2, r3, ARRAY[r1, r2, r3] FROM ( - SELECT random() + 1.01 AS r1, random() + 2.01 AS r2, random() + 3.01 AS r3 FROM generate_series(1, 1000000) t - ) i; -)); - -# Test avg -my $avg = $node->safe_psql("postgres", "SELECT AVG(v) FROM tst;"); -like($avg, qr/\[1\.5/); -like($avg, qr/,2\.5/); -like($avg, qr/,3\.5/); - -# Test matches real -my $r1 = $node->safe_psql("postgres", "SELECT AVG(r1)::float4 FROM tst;"); -my $r2 = $node->safe_psql("postgres", "SELECT AVG(r2)::float4 FROM tst;"); -my $r3 = $node->safe_psql("postgres", "SELECT AVG(r3)::float4 FROM tst;"); -is($avg, "[$r1,$r2,$r3]"); - -# Test explain -my $explain = $node->safe_psql("postgres", "EXPLAIN SELECT AVG(v) FROM tst;"); -like($explain, qr/Partial Aggregate/); - -done_testing();