| #!/usr/bin/env ruby |
| |
| if not ARGV[0] or not ARGV[1] then |
| printf("Please provide two 'blitters-test' static binaries in the command line.\n\n") |
| printf("The first should be linked with a correct reference pixman library.\n") |
| printf("The second binary should be linked with a pixman library which needs to be tested.\n") |
| exit(0) |
| end |
| |
| def test_range(min, max) |
| if `#{ARGV[0]} #{min} #{max} 2>/dev/null` == `#{ARGV[1]} #{min} #{max} 2>/dev/null` then |
| return |
| end |
| while max != min + 1 do |
| avg = ((min + max) / 2).to_i |
| res1 = `#{ARGV[0]} #{min} #{avg} 2>/dev/null` |
| res2 = `#{ARGV[1]} #{min} #{avg} 2>/dev/null` |
| if res1 != res2 then |
| max = avg |
| else |
| min = avg |
| end |
| end |
| return max |
| end |
| |
| base = 1 |
| while true do |
| # run infinitely, processing 100000 test cases per iteration |
| printf("running tests %d-%d\n", base, base + 100000 - 1); |
| res = test_range(base, base + 100000 - 1) |
| if res then |
| printf("-- ref --\n") |
| printf("%s\n", `#{ARGV[0]} -#{res}`) |
| printf("-- new --\n") |
| printf("%s\n", `#{ARGV[1]} -#{res}`) |
| |
| printf("\nFailed test %d, you can reproduce the problematic conditions by running\n", res) |
| printf("#{ARGV[1]} -%d\n", res) |
| exit(1) |
| end |
| base += 100000 |
| end |