#pragma warning disable 168 using System; namespace Tests { class Tuples { class ClassA { public static int operator<=>(Self lhs, Self rhs) { return 0; } } public static void Add(ref (int32, float) val) { val.0 += 100; val.1 += 200; } [Test] public static void TestBasic() { let (a, b, c) = (1, 2, 3); Test.Assert(a == 1); Test.Assert(b == 2); Test.Assert(c == 3); Test.Assert(typeof(decltype(a)) == typeof(int)); (int32, float) tVal1 = (1, 2.0f); // Allow conversion from named to unnamed tVal1 = (int32 a, float b)(2, 3.0f); let v0 = tVal1.0; Test.Assert(v0 == 2); Add(ref tVal1); Test.Assert(tVal1 == (a: 102, b: 203)); ClassA ca0 = scope .(); ClassA ca1 = scope .(); Test.Assert((ca0, ca0) == (ca1, ca1)); } class ValClass { public int mA; public int Prop { set { mA = value; } } } [Test] public static void TestDecompose() { ValClass vc = scope .(); uint8 zz = 202; (var val0, vc.Prop) = (101, zz); Test.Assert(val0 == 101); Test.Assert(vc.mA == 202); let tup0 = (111, 222); (int a, int b) tup1 = tup0; Test.Assert(tup0.0 == 111); Test.Assert(tup0.1 == 222); } } }