Files
swift-mirror/test/Constraints/tuple.swift
Doug Gregor fd37448f22 Implement tuple shuffling and variadic tuple semantics for tuple
conversion constraints.


Swift SVN r2713
2012-08-22 19:07:38 +00:00

60 lines
1.8 KiB
Swift

// Test various tuple constraints.
// RUN: %swift -repl < %s 2>&1 | FileCheck %s
func f0(x : Int, y : Float) {}
var i : Int
var f : Float
func f1(y : Float, rest : Int...) {}
//===--------------------------------------------------------------------===//
// Conversions and shuffles
//===--------------------------------------------------------------------===//
// Basic tuple shuffle
// CHECK: Constraints:
// CHECK: $T0 is an integer literal
// CHECK: (x : Int, y : Float) -> () == $T1 -> $T2
// CHECK: (y : [byref(heap)] Float, x : $T0) << $T1
// CHECK: ---Child system #1---
// CHECK: Assumptions:
// CHECK: assuming $T0 == Int64
// CHECK: Type Variables:
// CHECK: $T0 as Int64
// CHECK: $T1 as (x : Int64, y : Float)
// CHECK: $T2 as ()
// CHECK: SOLVED (completely)
// CHECK: Unique solution found.
:dump_constraints f0(y=f, x=1)
// Variadic functions.
// CHECK: Constraints:
// CHECK: $T0 is an integer literal
// CHECK: $T1 is an integer literal
// CHECK: $T2 is an integer literal
// CHECK: $T3 is an integer literal
// CHECK: $T4 is an integer literal
// CHECK: (y : Float, rest : Int...) -> () == $T5 -> $T6
// CHECK: (y : [byref(heap)] Float, $T0, $T1, $T2, $T3, $T4) << $T5
// CHECK: ---Child system #1---
// CHECK: Assumptions:
// CHECK: assuming $T0 == Int64
// CHECK: assuming $T1 == Int64
// CHECK: assuming $T2 == Int64
// CHECK: assuming $T3 == Int64
// CHECK: assuming $T4 == Int64
// CHECK: Type Variables:
// CHECK: $T0 as Int64
// CHECK: $T1 as Int64
// CHECK: $T2 as Int64
// CHECK: $T3 as Int64
// CHECK: $T4 as Int64
// CHECK: $T5 as (y : Float, rest : Int64...)
// CHECK: $T6 as ()
// CHECK: SOLVED (completely)
// CHECK: Unique solution found.
// FIXME: IRgen can't handle y=f at the end.
:dump_constraints f1(y=f, 1, 2, 3, 4, 5)