Bug #15552
closedapp_aobench.rb is broken
Description
Specifically, the image generated is incorrect.
When modifying the footer of the benchmark like this:
alias printf_orig printf
def printf *args
$fp.printf(*args)
end
File.open("ao.ppm", "w") do |fp|
$fp = fp
printf("P6\n")
printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
printf("255\n")
Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
end
undef printf
alias printf printf_orig
Here is the expected image:
I get this image with MRI 2.6.0:
And interestingly, TruffleRuby 1.0.0-rc11 renders an image closer to the expected one:
I guess this might be both an interpreter bug, and possibly also a bug in the benchmark code.
I think every benchmark should have some validation, otherwise it's prone to measure something unexpected like this.
Updated by mame (Yusuke Endoh) over 5 years ago
- Status changed from Open to Assigned
- Assignee set to mame (Yusuke Endoh)
And interestingly, TruffleRuby 1.0.0-rc11 renders an image closer to the expected one:
Closer :-)
This is caused by change of default encoding. The following fixes the issue. It is fortunate that the issue was not caused by wrong optimization.
diff --git a/benchmark/app_aobench.rb b/benchmark/app_aobench.rb
index 2bd6acfaf8..13cbc1657d 100644
--- a/benchmark/app_aobench.rb
+++ b/benchmark/app_aobench.rb
@@ -1,3 +1,5 @@
+# coding: US-ASCII
+
# AO render benchmark
# Original program (C) Syoyo Fujita in Javascript (and other languages)
# https://code.google.com/p/aobench/
By the way, the program uses a random number. The effect would be negligible, but I'd like to add srand(0)
after the above fix.
Updated by mame (Yusuke Endoh) over 5 years ago
- Status changed from Assigned to Closed
Applied in changeset trunk|r66892.
benchmark/app_aobench.rb: add a magic comment
To support the change of default encoding.
It had not worked correctly since 2.0 :-)
[Bug #15552]
Updated by Eregon (Benoit Daloze) over 5 years ago
@mame (Yusuke Endoh) Thanks for the quick fix!
With srand(0), I think we could add some verification, e.g., by computing a checksum of the image.