| // RUN: rm -rf %t && mkdir -p %t && %gyb %s -o %t/main.swift |
| // RUN: %line-directive %t/main.swift -- %target-build-swift -parse -Xfrontend -verify %t/main.swift |
| // REQUIRES: executable_test |
| |
| % from SwiftIntTypes import all_numeric_type_names, numeric_type_names_macintosh_only, \ |
| % all_integer_type_names, all_integer_binary_operator_names, all_integer_or_real_binary_operator_names, \ |
| % all_arithmetic_comparison_operator_names, all_integer_assignment_operator_names, \ |
| % all_integer_or_real_assignment_operator_names |
| |
| % int_ops = all_integer_binary_operator_names() + all_integer_assignment_operator_names() |
| % arith_ops = all_integer_or_real_binary_operator_names() + \ |
| % all_arithmetic_comparison_operator_names() + all_integer_or_real_assignment_operator_names() |
| |
| % count = 0 |
| // TODO: Verify the type of the result |
| |
| func testIteratedOperations() { |
| % for typesToTest, operatorsToTest in zip([all_integer_type_names(), all_numeric_type_names()], |
| % [int_ops, arith_ops]): |
| % operatorsToTest = [x for x in operatorsToTest if not '+' in x and not '-' in x] |
| %# TODO: rm when rdar://18695154 is fixed. |
| // typesToTest: ${typesToTest}, operatorsToTest: ${operatorsToTest} |
| % for T1 in typesToTest: |
| % for T2 in typesToTest: |
| ${ "\n\n#if arch(i386) || arch(x86_64)\n" if T1 in numeric_type_names_macintosh_only() |
| or T2 in numeric_type_names_macintosh_only() else "" } |
| % for op in operatorsToTest: |
| % count += 1 |
| % theDiagnostic = "// expected-error{{of type}} expected-note*{{expected an argument list of type}} expected-note*{{exist with these partially matching parameter lists}} " if (T1 != T2) else \ |
| % "// expected-note{{add an explicit type annotation}} expected-warning{{inferred to have type}}"\ |
| % if (op in all_integer_assignment_operator_names() + all_integer_or_real_assignment_operator_names())\ |
| % else "" #FIXME Temporary workaround for rdar://15928178 gyb miscompiles nested if elif |
| do { // ${count} |
| var x1_${T1}: ${T1} = 0 |
| var x2_${T2}: ${T2} = 0 |
| var result = x1_${T1} ${op} x2_${T2} ${theDiagnostic} |
| } |
| %end # op |
| ${ "\n#endif //arch(i386) || arch(x86_64)\n\n" if T1 in numeric_type_names_macintosh_only() |
| or T2 in numeric_type_names_macintosh_only() else "" } |
| %end # T2 |
| %end # T1 |
| %end # typesToTest |
| |
| } |