tomykaira/mips — pull request #11 by tomykaira (2012-11-13 17:08:04+00:00)
Title: Fractal flame testing : Fixes #8

Fractal Flame を直接動作させて検証するのは困難なので、部分的に切り出したファイルを用意し、その出力を OCaml で実行したものと比較できるような仕組みを作りました。

compiler_set/test/Loreley/test ディレクトリで `make test` を実行するとすべてのいま動くことが確認されているテストケースが実行されます。
今後は @u-natsuki さんとともにこの動くケースが増えるようにコンパイラを直していきます。

いま動かないのは次のケースです。

- read_gene: おそらく print_int にバグがあり、謎の文字列が出力されます。この問題は私が対応します。
- output_ppm: 所定サイズの全部 0 の ppm ファイルを生成することを期待していますが、無限ループして永遠に 0 出力しつづけます。
- apply_gene_no_random: いわゆるハイゼンバグです。次の差分を適用してみてください。 apply_gene_sub の最初の行の print を消すと結果がおかしくなります。
tuple 畳み込み関連ではないかと予想。
- shooting_sub: apply_gene が動かないと動きません。

```diff
diff --git a/compiler_set/test/Loreley/test/apply_gene_no_random.ml b/compiler_set/test/Loreley/tes
index 2d532bf..918edae 100644
--- a/compiler_set/test/Loreley/test/apply_gene_no_random.ml
+++ b/compiler_set/test/Loreley/test/apply_gene_no_random.ml
@@ -115,7 +115,7 @@
1 0 0 1 0 0
1 1 1

-100
+1
4 -0.448858 0.266176 0.127633
9 0.302333 0.425344 0.127633
12 0.147843 0.500465 0.127633
@@ -436,11 +436,13 @@ let apply_func fn_coeff x y=
in

let rec apply_gene_sub fn_ary x y retx rety=
+ print_char 't'; print_int5 x; print_char 's'; print_int5 y; (* delete this print will cause the
if fn_ary==[] then (retx,rety)
else
(
let head::tail=fn_ary in
- (let (nx,ny)=apply_func head x y in
+ (
+ let (nx,ny)=apply_func head x y in
apply_gene_sub tail x y (retx+.nx) (rety+.ny))
)
in
@@ -448,6 +450,9 @@ in
let apply_gene fn x y col=
let (cIndex,cBlendRate,cWeight,(c1,c2,c3,c4,c5,c6),fun_ary,(d1,d2,d3,d4,d5,d6))= !dnaArray.(fn)
let nx,ny=apply_gene_sub fun_ary (c1*.x+.c3*.y+.c5) (c2*.x+.c4*.y+.c6) 0.0 0.0 in
+ print_char 'n'; print_int5 nx; print_int5 ny; print_int5 d1; print_int5 d3; print_int5 d5;
+ print_char 'c'; print_int5 (d1*.nx);
+ print_char 'd'; print_int5 (d3*.ny);
((d1*.nx+.d3*.ny+.d5),(d2*.nx+.d4*.ny+.d6),(col *. (1.0 -. cBlendRate)) +. cIndex*.cBlendRate)
in
read_gene();
```

注意: この makefile は architecture が最新であることは確認しないので、事前に `make architecture` をしておいてください。

@u-natsuki さんが内容を確認したらマージボタンを押してください。