mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-02 09:45:50 +01:00
On #2224 @zygoloid pointed out we needed --implicit-check-not to ensure we were correctly matching output. This is the standard way we're writing explorer tests, so I was looking at unifying our lit approaches. This is one take on it, making more use of substitutions to bring various testing into alignment, as well as symlinks to avoid config skew (maybe I'll eventually figure out a better solution than symlinks). Makes a couple small fixes in explorer to remove end-of-line whitespace on output.
41 lines
957 B
Plaintext
41 lines
957 B
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
|
|
//
|
|
// RUN: %{explorer} %s 2>&1 | %{FileCheck-strict} %s
|
|
// RUN: %{explorer-trace} %s 2>&1 | %{FileCheck-allow-unmatched} %s
|
|
// AUTOUPDATE: %{explorer} %s
|
|
// CHECK:result: 0
|
|
|
|
package ExplorerTest api;
|
|
|
|
choice Ints {
|
|
None,
|
|
One(i32),
|
|
Two(i32, i32)
|
|
}
|
|
|
|
fn Main() -> i32 {
|
|
var x: Ints = Ints.None();
|
|
var y: Ints = Ints.One(42);
|
|
var n: i32 = 0;
|
|
match (y) {
|
|
case Ints.None() => { n = n + 2; }
|
|
case Ints.One(x: auto) => { n = x + 1 - 42; }
|
|
case Ints.Two(a: auto, b: auto) => { n = 2; }
|
|
}
|
|
match (x) {
|
|
case Ints.One(x: auto) => { n = x + 2; }
|
|
case Ints.None() => { n = n - 1; }
|
|
case Ints.Two(x: auto, y: auto) => { n = 5; }
|
|
}
|
|
return n;
|
|
}
|
|
|
|
// Test some alternate syntaxes
|
|
choice MoreInts {
|
|
None(),
|
|
One(i32),
|
|
Two(i32, i32),
|
|
}
|