Files
carbon-lang/explorer/testdata/impl_match/match_first.carbon
T
Richard Smith 212188a922 Prefer to put STDOUT CHECK at the end of the file. (#3073)
Allow interleaving of STDOUT and STDERR check lines. Put STDOUT lines
after the line they're attached to, and STDERR lines before. If no
STDOUT check line is attached to any line, then put them all at the end
of the file instead.

This is intended to better handle the case where stdout contains
unreplaced mentions of line numbers, and also reflects that stdout is
typically a consequence of the test rather than commentary on it, so
placing it after the test seems likely to read better.
2023-08-08 19:51:52 +00:00

70 lines
1.4 KiB
Plaintext

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// AUTOUPDATE
package ExplorerTest api;
interface A {
fn Which() -> i32;
}
interface X {}
interface Y {}
interface Z {}
__match_first {
impl forall [T:! X] T as A {
fn Which() -> i32 { return 1; }
}
impl forall [T:! Y] T as A {
fn Which() -> i32 { return 2; }
}
impl forall [T:! Z] T as A {
fn Which() -> i32 { return 3; }
}
impl forall [T:! type] T as A {
fn Which() -> i32 { return 4; }
}
}
class XYZ {}
class XY {}
class XZ {}
class YZ {}
class JustX {}
class JustY {}
class JustZ {}
class None {}
impl XYZ as X & Y & Z {}
impl XY as X & Y {}
impl XZ as X & Z {}
impl YZ as Y & Z {}
impl JustX as X {}
impl JustY as Y {}
impl JustZ as Z {}
fn Main() -> i32 {
Print("XYZ: {0}", XYZ.(A.Which)());
Print("XY: {0}", XY.(A.Which)());
Print("XZ: {0}", XZ.(A.Which)());
Print("YZ: {0}", YZ.(A.Which)());
Print("JustX: {0}", JustX.(A.Which)());
Print("JustY: {0}", JustY.(A.Which)());
Print("JustZ: {0}", JustZ.(A.Which)());
Print("None: {0}", None.(A.Which)());
return 0;
}
// CHECK:STDOUT: XYZ: 1
// CHECK:STDOUT: XY: 1
// CHECK:STDOUT: XZ: 1
// CHECK:STDOUT: YZ: 2
// CHECK:STDOUT: JustX: 1
// CHECK:STDOUT: JustY: 2
// CHECK:STDOUT: JustZ: 3
// CHECK:STDOUT: None: 4
// CHECK:STDOUT: result: 0