diff --git a/executable_semantics/BUILD b/executable_semantics/BUILD index e099060e5ec8..8740148d1a73 100644 --- a/executable_semantics/BUILD +++ b/executable_semantics/BUILD @@ -32,6 +32,8 @@ EXAMPLES = [ "break1", "choice1", "continue1", + "fun_named_params", + "fun_named_params2", "fun_recur", "fun1", "fun2", @@ -51,6 +53,7 @@ EXAMPLES = [ "if1", "if2", "if3", + "match_any_int", "match_int_default", "match_int", "match_type", @@ -66,8 +69,11 @@ EXAMPLES = [ "tuple_equality2", "tuple_equality3", "tuple_match", + "tuple_match2", + "tuple_match3", "tuple1", "tuple2", + "tuple3", "while1", "zero", "experimental_continuation1", diff --git a/executable_semantics/testdata/fun_named_params.6c b/executable_semantics/testdata/fun_named_params.6c new file mode 100644 index 000000000000..727741385536 --- /dev/null +++ b/executable_semantics/testdata/fun_named_params.6c @@ -0,0 +1,9 @@ +// 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 + +fn f(Int: x, .d = Int: y) => x + y; + +fn main() -> Int { + return f(1, .d = 2) - 3; +} diff --git a/executable_semantics/testdata/fun_named_params.golden b/executable_semantics/testdata/fun_named_params.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/fun_named_params.golden @@ -0,0 +1 @@ +result: 0 diff --git a/executable_semantics/testdata/fun_named_params2.6c b/executable_semantics/testdata/fun_named_params2.6c new file mode 100644 index 000000000000..ae8e7adf0a30 --- /dev/null +++ b/executable_semantics/testdata/fun_named_params2.6c @@ -0,0 +1,9 @@ +// 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 + +fn f(Int: x, .d = Int: y, Int: z, .e = Int: a) => (x + y) - (z + a); + +fn main() -> Int { + return f(.e = 2, 1, 3, .d = 4); +} diff --git a/executable_semantics/testdata/fun_named_params2.golden b/executable_semantics/testdata/fun_named_params2.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/fun_named_params2.golden @@ -0,0 +1 @@ +result: 0 diff --git a/executable_semantics/testdata/match_any_int.6c b/executable_semantics/testdata/match_any_int.6c new file mode 100644 index 000000000000..7de6e3017bc5 --- /dev/null +++ b/executable_semantics/testdata/match_any_int.6c @@ -0,0 +1,11 @@ +// 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 + +fn main() -> Int { + var auto: t = 5; + match (t) { + case Int: x => + return x - 5; + } +} diff --git a/executable_semantics/testdata/match_any_int.golden b/executable_semantics/testdata/match_any_int.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/match_any_int.golden @@ -0,0 +1 @@ +result: 0 diff --git a/executable_semantics/testdata/tuple3.6c b/executable_semantics/testdata/tuple3.6c new file mode 100644 index 000000000000..015ccd5d9781 --- /dev/null +++ b/executable_semantics/testdata/tuple3.6c @@ -0,0 +1,8 @@ +// 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 + +fn main() -> Int { + var (.x = Int, Int): t = (3, .x = 2); + return t.x + 1 - t[0]; +} diff --git a/executable_semantics/testdata/tuple3.golden b/executable_semantics/testdata/tuple3.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/tuple3.golden @@ -0,0 +1 @@ +result: 0 diff --git a/executable_semantics/testdata/tuple_match2.6c b/executable_semantics/testdata/tuple_match2.6c new file mode 100644 index 000000000000..dc2620cfb7e4 --- /dev/null +++ b/executable_semantics/testdata/tuple_match2.6c @@ -0,0 +1,13 @@ +// 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 + +// Test matching with a mixture of positional and named fields. + +fn main() -> Int { + var auto: t = (.x = 5, 2); + match (t) { + case (auto: a, .x = auto: b) => + return a - b + 3; + } +} diff --git a/executable_semantics/testdata/tuple_match2.golden b/executable_semantics/testdata/tuple_match2.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/tuple_match2.golden @@ -0,0 +1 @@ +result: 0 diff --git a/executable_semantics/testdata/tuple_match3.6c b/executable_semantics/testdata/tuple_match3.6c new file mode 100644 index 000000000000..067a1baebee7 --- /dev/null +++ b/executable_semantics/testdata/tuple_match3.6c @@ -0,0 +1,13 @@ +// 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 + +// Test matching of a tuple inside a tuple. + +fn main() -> Int { + var auto: t = ((1,2),(3,4)); + match (t) { + case ((auto: a, auto: b), auto: c) => + return a - b + c[0] - c[1] + 2; + } +} diff --git a/executable_semantics/testdata/tuple_match3.golden b/executable_semantics/testdata/tuple_match3.golden new file mode 100644 index 000000000000..2db2755da426 --- /dev/null +++ b/executable_semantics/testdata/tuple_match3.golden @@ -0,0 +1 @@ +result: 0