summaryrefslogtreecommitdiff
path: root/test/scaling-test-bisect.rb
blob: 2e4aff30e27706fa2fd508b3173cc42828ffe65e (plain)
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
#!/usr/bin/env ruby

if not ARGV[0] or not ARGV[1] then
    printf("Please provide two 'scaling-test' static binaries in the command line.\n\n")
    printf("The first should be linked with the correct reference pixman library.\n")
    printf("The second binrary should be linked with the pixman library to be tested.\n")
    exit(0)
end

$MAX = 10000
$MIN = 1
$AVG = 0

if `#{ARGV[0]} #{$MAX} 2>/dev/null` == `#{ARGV[1]} #{$MAX} 2>/dev/null` then
    printf("test ok\n")
    exit(0)
end

printf("test failed, bisecting...\n")

while $MAX != $MIN + 1 do
    $AVG = (($MIN + $MAX) / 2).to_i
    res1 = `#{ARGV[0]} #{$AVG} 2>/dev/null`
    res2 = `#{ARGV[1]} #{$AVG} 2>/dev/null`
    if res1 != res2 then
        $MAX = $AVG
    else
        $MIN = $AVG
    end
end

printf("-- ref --\n")
printf("%s\n", `#{ARGV[0]} -#{$MAX}`)
printf("-- new --\n")
printf("%s\n", `#{ARGV[1]} -#{$MAX}`)

printf("\nFailed test number is %d, you can reproduce the problematic conditions\n", $MAX)
printf("by running 'scaling-test -%d'\n", $MAX)