Files
swift-mirror/test/Constraints/one_way_solve.swift
Anthony Latsis 82ac9328ae [NFC] CS: Misc minor debug output tweaks
* Use fancy arrows (`→`) because they are distinct from and shorter than `->`,
  and fancier.
* We have two ways of demarcating locators: `@ <locator>` and `[[<locator>]];`.
  Stick to the first, which is shorter and clearer.
* 'attempting type variable' → 'attempting binding'. *Bindings* are attempted,
  not type variables.
* `considering ->` → `considering:`. I think a colon is semantically more fit
  and makes things easier to read if the considered constraint has arrows in its
  description or types. It’s also shorter this way.
2023-04-18 22:42:59 +03:00

50 lines
2.0 KiB
Swift

// RUN: %target-typecheck-verify-swift -parse-stdlib -debug-constraints > %t.log 2>&1
// RUN: %FileCheck %s < %t.log
import Swift
func takeDoubleAndBool(_: Double, _: Bool) { }
func testTernaryOneWay(b: Bool, b2: Bool) {
// CHECK: ---Connected components---
// CHECK-NEXT: 3: $T{{[0-9]+}} depends on 1
// CHECK-NEXT: 1: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}} depends on 0, 2
// CHECK-NEXT: 2: $T{{[0-9]+}}
// CHECK-NEXT: 0: $T{{[0-9]+}}
// CHECK-NEXT: 4: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
takeDoubleAndBool(
Builtin.one_way(
b ? Builtin.one_way(3.14159) : Builtin.one_way(2.71828)),
b == true)
}
func int8Or16(_ x: Int8) -> Int8 { return x }
func int8Or16(_ x: Int16) -> Int16 { return x }
func testTernaryOneWayOverload(b: Bool) {
// CHECK: ---Connected components---
// CHECK: 1: [[A:\$T[0-9]+]] [[B:\$T[0-9]+]] [[C:\$T[0-9]+]] depends on 0, 2
// CHECK: 2: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
// CHECK: 0: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: (considering: $T{{[0-9]+}} conv [[C]]
// CHECK: (considering: $T{{[0-9]+}} conv [[C]]
// CHECK: (considering: [[C]] conv Int8
// CHECK: (found solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
// CHECK: (composed solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
// CHECK-NOT: (composed solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
let _: Int8 = b ? Builtin.one_way(int8Or16(17)) : Builtin.one_way(int8Or16(42))
}