blob: a4ea5a41835a29da1e83baf25f5381a226be6633 [file] [log] [blame]
// RUN: %empty-directory(%t)
// RUN: %gyb %s -o %t/main.swift
// RUN: %line-directive %t/main.swift -- %target-build-swift -typecheck -Xfrontend -verify %t/main.swift
// REQUIRES: executable_test
// FIXME(integers): this test needs serious refactoring as there is now a lot
// more variation in the diagnostics. <rdar://problem/31635173>
// XFAIL: *
% 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_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_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]):
%# 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 = ""
% all_assignment_operators = (all_integer_assignment_operator_names() + all_integer_or_real_assignment_operator_names())
% if T1 != T2:
% if op in [">>", "<<"]: # heterogeneous shifts are allowed
% theDiagnostic = ""
% elif op in [">>=", "<<="]:
% theDiagnostic = "// expected-note{{add an explicit type annotation}} expected-warning{{inferred to have type}}"
% elif op not in ["&+", "&-", "&*"]:
% theDiagnostic = "// expected-error{{of type}} expected-note*{{expected an argument list of type}} expected-note*{{exist with these partially matching parameter lists}}"
% else:
% theDiagnostic = "// expected-error {{'Self' could not be inferred}}"
% end
% else:
% if op in all_assignment_operators:
% theDiagnostic = "// expected-note{{add an explicit type annotation}} expected-warning{{inferred to have type}}"
% else:
% pass
% end
% end
do { // ${count}
var x1_${T1}: ${T1} = 0
var x2_${T2}: ${T2} = 0
var result = x1_${T1} ${op} x2_${T2} ${theDiagnostic}
}
% end # for 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
}