1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#include "test_static.isph"
typedef bool<3> bool3;
// a[] = { 1, 2, 3, ... };
task void f_f(uniform float RET[], uniform float a[]) {
RET[programIndex] = 0;
int int_var = ((int)a[programIndex]) % 3;
bool var1 = int_var == 0;
bool var2 = int_var == 1;
bool var3 = int_var == 2;
bool3 bool3_vec1 = {var1, var2, var2};
bool3 bool3_vec2 = {var1, var3, var2};
// Extract from vector and check.
bool var = bool3_vec1.z;
if (var != var2)
RET[programIndex] = -1;
// Insert value in vector and check.
bool3_vec1.z = var3;
if (bool3_vec1[2] != var3)
RET[programIndex] = -1;
// Logical OR
bool3 bool3_vec = bool3_vec1 || bool3_vec2;
// Check result of Logical OR when both operands are short vectors.
if ((bool3_vec.x != (var1 || var1)) || (bool3_vec.y != (var2 || var3)) || (bool3_vec.z != (var3 || var2)))
RET[programIndex] = -1;
bool3_vec = var2 || bool3_vec1;
// Check result of Logical OR when only one operand is a short vector.
if ((bool3_vec.x != (var2 || var1)) || (bool3_vec.y != (var2 || var2)) || (bool3_vec.z != (var2 || var3)))
RET[programIndex] = -1;
// Logical AND
bool3_vec = bool3_vec1 && bool3_vec2;
// Check result of Logical AND when both operands are short vectors.
if ((bool3_vec.x != (var1 && var1)) || (bool3_vec.y != (var2 && var3)) || (bool3_vec.z != (var3 && var2)))
RET[programIndex] = -1;
bool3_vec = var2 && bool3_vec1;
// Check result of Logical AND when only one operand is a short vector.
if ((bool3_vec.x != (var2 && var1)) || (bool3_vec.y != (var2 && var2)) || (bool3_vec.z != (var2 && var3)))
RET[programIndex] = -1;
// Bitwise OR
bool3_vec = bool3_vec1 | bool3_vec2;
// Check result of Bitwise OR when both operands are short vectors.
if ((bool3_vec.x != (var1 | var1)) || (bool3_vec.y != (var2 | var3)) || (bool3_vec.z != (var3 | var2)))
RET[programIndex] = -1;
bool3_vec = var2 | bool3_vec1;
// Check result of Bitwise OR when only one operand is a short vector.
if ((bool3_vec.x != (var2 | var1)) || (bool3_vec.y != (var2 | var2)) || (bool3_vec.z != (var2 | var3)))
RET[programIndex] = -1;
// Bitwise AND
bool3_vec = bool3_vec1 & bool3_vec2;
// Check result of Bitwise AND when both operands are short vectors.
if ((bool3_vec.x != (var1 & var1)) || (bool3_vec.y != (var2 & var3)) || (bool3_vec.z != (var3 & var2)))
RET[programIndex] = -1;
bool3_vec = var2 & bool3_vec1;
// Check result of Bitwise AND when only one operand is a short vector.
if ((bool3_vec.x != (var2 & var1)) || (bool3_vec.y != (var2 & var2)) || (bool3_vec.z != (var2 & var3)))
RET[programIndex] = -1;
// Comparison Operations
bool3_vec = (bool3_vec1 == bool3_vec2);
// Check result of == when both operands are short vectors.
if ((bool3_vec.x != (var1 == var1)) || (bool3_vec.y != (var2 == var3)) || (bool3_vec.z != (var3 == var2)))
RET[programIndex] = -1;
bool3_vec = (bool3_vec1 != bool3_vec2);
// Check result of != when both operands are short vectors.
if ((bool3_vec.x != (var1 != var1)) || (bool3_vec.y != (var2 != var3)) || (bool3_vec.z != (var3 != var2)))
RET[programIndex] = -1;
}
task void result(uniform float ret[]) { ret[programIndex] = 0; }
|