diff --git a/tests/conway.qbl b/tests/conway.qbl new file mode 100644 index 0000000..8d6ea98 --- /dev/null +++ b/tests/conway.qbl @@ -0,0 +1,354 @@ +//valid, # +// # +//### +// +// +// +// +// +//-------- +// +//# # +// ## +// # +// +// +// +// +//-------- +// +// # +//# # +// ## +// +// +// +// +//-------- +// +// # +// ## +// ## +// +// +// +// +//-------- +// +// # +// # +// ### +// +// +// +// +//-------- +//:END: +arr field { int 64 } + +arr field2 { int 64 } + +1 0 coordToIndex 1 field.write +2 1 coordToIndex 1 field.write +0 2 coordToIndex 1 field.write +1 2 coordToIndex 1 field.write +2 2 coordToIndex 1 field.write + +printArray + +true 3 +while +{ + // i + iteration + 0 dup 1 > - +} +deq + +function => iteration +{ + true 0 + while + { + // y + true 0 req + // true x y + while + { + // x y + dup swp req + // y x x + dup swp + // x y x y + neighbourhood + // x y c + dup swp req + // x y x c + req dup swp req + // x y x y c + coordToIndex req req req + // i x y c + dup field.read + // x y c i v + req req req swp + // x y c v i + req req + // c v i x y + update + // x y + check + req + // lt x+1 y + } + // x y + deq check + // lt y+1 + } + deq + copyArrays + printArray +} + +function => copyArrays +{ + true 0 + while + { + // 0 + dup field2.read + dup field.write + checkArr + } + deq +} + +function => printArray +{ + true 0 + while + { + // y + true 0 req + // true x y + while + { + // x y + dup req dup swp + // x y x y + coordToIndex + // x y i + req req field.read + // x y v + req req printSym + // x y + check req + // lt x+1 y + } + // x y + "" deq req println check + // lt y+1 + } + deq + "--------" println +} + +function int => printSym +{ + // x + 1 == + // eq + if + { + "#" + } + else + { + " " + } + print +} + +function int => bool int checkArr +{ + // i + 1 + field.length dup + // i+1 l i+1 + < req + // lt i+1 +} + +function int => bool int check +{ + //??? + // i + 1 + 8 dup < req + //??? + // i+1 8 i+1 +} + +function int int int => update +{ + // count value index + 3 dup req req req + // 3 c c v i + == req req req + // eq c v i + if + { + 1 deq deq field2.write + } + else + { + // c v i + 2 req req req + // 2 c v i + == 1 req req req + // 1 v i eq + == req && req + // teq i + if + { + 1 + } + else + { + 0 + } + field2.write + } +} + +function int int => int neighbourhood +{ + // x y + dup 1 req req - + // x y x-1 + 0 req req dup >= + // x y x-1 ge + req req req + // ge x y x-1 + if + { + req dup swp + // x y x-1 y + req req + // x-1 y x y + row + // x y abc + } + else + { + // x y x-1 + req req + // x-1 x y + deq 0 + // x y 0 + } + dup swp req req + // y x abc x + dup swp req row + // x y abc def + req req + + // x y abcdef + + dup swp req req + // y x abcdef x + dup swp req + // x y x y abcdef + coordToIndex + // x y abcdef i + req req req + // i x y abcdef + field.read + // x y abcdef v + req req - + // x y abcdef-v + + 1 req req req + // 1 x y abcdef + + req req + // x+1 y abcdef + dup 8 req req req + // x+1 l x+1 y abcdef + < req req req + // lt x+1 y abcdef + if + { + row + // abcdef ghi + } + else + { + deq deq 0 + // abcdef 0 + } + + + // abcdefghi +} + +function int int => int row +{ + // x y + 1 req dup - + // x y y-1 + dup req req + // y-1 x x y + 0 dup swp req req + // 0 y-1 x y-1 x y + > req req req req + // gt x y-1 x y + if + { + deq deq 0 + // x y 0 + } + else + { + // x y-1 x y + coordToIndex req req + // i x y + field.read + // x y a + } + // x y a + dup swp req req + // y x a x + dup swp req + // x y x y a + coordToIndex + // x y a i + req req req field.read + // x y a b + req req + + // x y a+b + req 1 req + // a+b x 1 y + req req + req + // x y+1 a+b + req req 8 + // a+b x y+1 l + req req dup + // y+1 l a+b x y+1 + < req req req + // lt a+b x y+1 + if + { + // a+b x y+1 + req coordToIndex + // a+b i + req field.read + // a+b c + } + else + { + req deq deq 0 + // a+b 0 + } + + + // a+b+c +} + +function int int => int coordToIndex +{ + 8 req * + +} \ No newline at end of file