From 882d3c010c0d119da0ebbfe03b7ec6aad5106c29 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Wed, 4 Feb 2015 10:20:34 +0100 Subject: [PATCH] Add a failing test for #212 --- .../FSharp.Compiler.Unittests.fsproj | 1 + .../RecordInitialisation.fs | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs diff --git a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj index 280b96abace2..9478a1b6fbca 100644 --- a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj +++ b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj @@ -60,6 +60,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs b/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs new file mode 100644 index 000000000000..520f9a6c330f --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +namespace FSharp.Compiler.Unittests + +open System +open System.Text +open NUnit.Framework +open Microsoft.FSharp.Compiler + +type Foo = + { A : int + B : int + C : int } + + +[] +type OrderOfRecordInitialisation() = + + let expected = + { A = 1 + B = 2 + C = 3 } + + [] + member this.ShouldInitialzeInGivenOrder1() = + let order = ref "" + let actual = + { A = let _ = order := !order + "1" in 1 + B = let _ = order := !order + "2" in 2 + C = let _ = order := !order + "3" in 3 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) + + [] + member this.ShouldInitialzeInGivenOrder2() = + let order = ref "" + let actual = + { A = let _ = order := !order + "1" in 1 + C = let _ = order := !order + "2" in 3 + B = let _ = order := !order + "3" in 2 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) + + [] + member this.ShouldInitialzeInGivenOrder3() = + let order = ref "" + let actual = + { B = let _ = order := !order + "1" in 2 + A = let _ = order := !order + "2" in 1 + C = let _ = order := !order + "3" in 3 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) + + [] + member this.ShouldInitialzeInGivenOrder4() = + let order = ref "" + let actual = + { B = let _ = order := !order + "1" in 2 + C = let _ = order := !order + "2" in 3 + A = let _ = order := !order + "3" in 1 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) + + [] + member this.ShouldInitialzeInGivenOrder5() = + let order = ref "" + let actual = + { C = let _ = order := !order + "1" in 3 + A = let _ = order := !order + "2" in 1 + B = let _ = order := !order + "3" in 2 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) + + [] + member this.ShouldInitialzeInGivenOrder6() = + let order = ref "" + let actual = + { C = let _ = order := !order + "1" in 3 + B = let _ = order := !order + "2" in 2 + A = let _ = order := !order + "3" in 1 } + + Assert.AreEqual(expected, actual) + Assert.AreEqual("123", !order) \ No newline at end of file