1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
use strict;
use lib 't';
use TestLib;
use Test::More;
if (! TestLib::have_jit()) {
ok 1, "No JIT tests on this architecture";
done_testing();
exit;
}
my ($os, $osversion) = os_release();
foreach my $v (@MAJORS) {
if ($v < 11) {
ok 1, "No JIT support on $v";
next;
}
note "$v";
program_ok 'root', "pg_createcluster $v main --start", 0;
my $jit_default = $v == '11' ? 'off' : 'on';
like_program_out 'postgres', "psql -Xatc 'show jit'", 0, qr/$jit_default/, "JIT is $jit_default by default";
unlike_program_out 'postgres', "psql -c 'explain (analyze) select count(*) from pg_class'", 0, qr/JIT/,
"No JIT on cheap query";
my $run_jit_test = 1;
if ($v == 11) { # skip JIT tests on 11, it supports only up to LLVM 15 (removed in trixie)
note "skip JIT tests on 11, it supports only up to LLVM 15 (removed in trixie)";
$run_jit_test = 0;
} elsif ($v >= 18) {
my $f = $ENV{'PG_FLAVOR'} // '';
my $jit_deb = "postgresql-$v$f-jit";
if (deb_installed($jit_deb)) {
note "$jit_deb is installed";
} else {
note "$jit_deb is not installed, skipping JIT tests";
$run_jit_test = 0;
}
}
if ($run_jit_test) {
program_ok 'root', "pg_conftool $v main set seq_page_cost 100000", 0;
program_ok 'root', "pg_conftool $v main set random_page_cost 100000", 0;
program_ok 'root', "pg_ctlcluster $v main reload", 0;
like_program_out 'postgres', "psql -c 'explain (analyze) select count(*) from pg_class'", 0, qr/Timing: Generation .* ms/,
"Expensive query is JITed";
}
program_ok 'root', "pg_dropcluster --stop $v main", 0;
check_clean;
}
done_testing();
# vim: filetype=perl
|