From f21216ecadd06e3ba0617e88009e91d9a6f90ad3 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Tue, 27 Aug 2013 06:35:58 -0400 Subject: [PATCH] A test for that xor stuff (the same one I used to cause the bug to manifest in the first place). --- tests/xor.qc | 32 +++++++++++++++++++++----------- tests/xor.tmpl | 4 ++++ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tests/xor.qc b/tests/xor.qc index 531a5fb..df6900d 100644 --- a/tests/xor.qc +++ b/tests/xor.qc @@ -3,38 +3,42 @@ vector swap(float x, float y) { // everyone knows this trick ret.x = x; ret.y = y; - + ret.x = ret.x ^ ret.y; ret.y = ret.y ^ ret.x; ret.x = ret.x ^ ret.y; - + return ret; } +float f(vector b) { + return b.x+b.y+b.z; +} + void main() { float x = 5; float y = 3; float z = x ^ y; // 6 - + float a = 2; float b = 10; float c = a ^ b; // 8 - + print(ftos(z), "\n"); print(ftos(c), "\n"); - + // commutative? if (x ^ y == y ^ x) print("commutative\n"); - + // assocative? if (x ^ (y ^ z) == (x ^ y) ^ z) print("assocative\n"); - + // elements are their own inverse? if (x ^ 0 == x) print("inverse\n"); - + // vector ^ vector // vector ^ float // are legal in constant expressions (currently) @@ -43,13 +47,13 @@ void main() { print("vv: ", vtos(v1 ^ v2), "\n"); print("vf: ", vtos(v1 ^ 10), "\n"); - + const vector v3 = '5 2 5' ^ '3 10 3'; const vector v4 = '5 2 5' ^ 10; - + print("vv: ", vtos(v3), "\n"); print("vf: ", vtos(v4), "\n"); - + // good olde xor swap test too float swap_x = 100; float swap_y = 200; @@ -63,4 +67,10 @@ void main() { swap_v ^= swap_u; swap_u ^= swap_v; print("'1 2 3':'4 5 6' swapped is: ", vtos(swap_u), ":", vtos(swap_v), "\n"); + + // the one that showed us overlap bugs + print(vtos('1 2 3' ^ f('3 2 1') ^ f('1 1 1')), "\n"); + print(vtos('1 2 3' ^ f('3 2 1') ^ 3), "\n"); + print(vtos('1 2 3' ^ 6 ^ 3), "\n"); + print(vtos('1 2 3' ^ 6 ^ f('1 1 1')), "\n"); } diff --git a/tests/xor.tmpl b/tests/xor.tmpl index a08d824..1c59af8 100644 --- a/tests/xor.tmpl +++ b/tests/xor.tmpl @@ -14,3 +14,7 @@ M: vv: '6 8 6' M: vf: '15 8 15' M: 100:200 swapped is: 200:100 M: '1 2 3':'4 5 6' swapped is: '4 5 6':'1 2 3' +M: '4 7 6' +M: '4 7 6' +M: '4 7 6' +M: '4 7 6' -- 2.39.2