Explorar o código

more tests of tuples, mixing positional and explicit field names (#480)

* more tests of tuples, especially mixing positional and explicit field names

* test of match with nested tuple

* Update executable_semantics/testdata/fun_named_params2.6c

Co-authored-by: Geoff Romer <gromer@google.com>

Co-authored-by: Geoff Romer <gromer@google.com>
Jeremy G. Siek %!s(int64=5) %!d(string=hai) anos
pai
achega
e89b8daad7

+ 6 - 0
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",

+ 9 - 0
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;
+}

+ 1 - 0
executable_semantics/testdata/fun_named_params.golden

@@ -0,0 +1 @@
+result: 0

+ 9 - 0
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);
+}

+ 1 - 0
executable_semantics/testdata/fun_named_params2.golden

@@ -0,0 +1 @@
+result: 0

+ 11 - 0
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;
+  }
+}

+ 1 - 0
executable_semantics/testdata/match_any_int.golden

@@ -0,0 +1 @@
+result: 0

+ 8 - 0
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];
+}

+ 1 - 0
executable_semantics/testdata/tuple3.golden

@@ -0,0 +1 @@
+result: 0

+ 13 - 0
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;
+  }
+}

+ 1 - 0
executable_semantics/testdata/tuple_match2.golden

@@ -0,0 +1 @@
+result: 0

+ 13 - 0
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;
+  }
+}

+ 1 - 0
executable_semantics/testdata/tuple_match3.golden

@@ -0,0 +1 @@
+result: 0