1 import sys 2 from genutil import * 3 4 # Templates 5 6 reservedOperatorCaseTemplate = """ 7 case operator_${{NAME}} 8 expect compile_fail 9 values {} 10 11 both "" 12 precision mediump float; 13 precision mediump int; 14 15 ${DECLARATIONS} 16 17 void main() 18 { 19 ${SETUP} 20 int value = 100; 21 ${{OP}} 22 ${OUTPUT} 23 } 24 "" 25 end 26 """[1:-1] 27 28 # Classes 29 30 class ReservedOperatorCase(ShaderCase): 31 def __init__(self, op): 32 self.name = op.name 33 if op.operator == "~": 34 self.operation = 'value = ~value;' 35 else: 36 self.operation = 'value ' + op.operator + ' 1;' 37 38 def __str__(self): 39 params = { 40 "NAME": self.name, 41 "OP" : self.operation 42 } 43 return fillTemplate(reservedOperatorCaseTemplate, params) 44 45 46 class Operator(): 47 def __init__(self, operator, name): 48 self.operator = operator 49 self.name = name 50 51 # Declarations 52 53 RESERVED_OPERATORS = [ 54 Operator("%", "modulo"), 55 Operator("~", "bitwise_not"), 56 Operator("<<", "bitwise_shift_left"), 57 Operator(">>", "bitwise_shift_right"), 58 Operator("&", "bitwise_and"), 59 Operator("^", "bitwise_xor"), 60 Operator("|", "bitwise_or"), 61 Operator("%=", "assign_modulo"), 62 Operator("<<=", "assign_shift_left"), 63 Operator(">>=", "assign_shift_right"), 64 Operator("&=", "assign_and"), 65 Operator("^=", "assign_xor"), 66 Operator("|=", "assign_or") 67 ] 68 69 # Reserved operator usage cases 70 71 reservedOperatorCases = [] 72 73 for operator in RESERVED_OPERATORS: 74 reservedOperatorCases.append(ReservedOperatorCase(operator)) # Reserved operators 75 76 # Main program 77 78 if __name__ == "__main__": 79 print "Generating shader case files." 80 writeAllCases("reserved_operators.test", reservedOperatorCases)