File: 027_jit.t

package info (click to toggle)
postgresql-common 286
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,532 kB
  • sloc: perl: 4,170; sh: 1,577; makefile: 327; sql: 13; ansic: 10
file content (59 lines) | stat: -rw-r--r-- 1,792 bytes parent folder | download
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