From 507ad7ace4eefa463bed3ecaeccdea3c21df91c1 Mon Sep 17 00:00:00 2001 From: "Thorsten (Gerbrunn)" Date: Sat, 27 Jun 2020 12:19:14 +0200 Subject: [PATCH 1/3] Migrated Uncheked/DefaultOf01.fs test case --- .../Core/Unchecked/UncheckedTests.fs | 47 +++++++++++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../Libraries/Core/Unchecked/DefaultOf01.fs | 51 ------------------- .../Source/Libraries/Core/Unchecked/env.lst | 1 - 4 files changed, 48 insertions(+), 52 deletions(-) create mode 100644 tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs delete mode 100644 tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf01.fs diff --git a/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs b/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs new file mode 100644 index 00000000000..781f6e5f2ff --- /dev/null +++ b/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework + +[] +module ``Unchecked Tests`` = + + type DUType = + | A + | B of int + | C of DUType * DUType + + type RecordType = { A : int; B : string; C : DUType } + + type ClassType = string + + type InterfaceType = + abstract DoStuff : unit -> unit + + type EnumType = + | A = 1 + | B = 2 + | C = 4 + + type StructType = struct + val m_ivalue : int + val m_svalue : string + member this.IValue = this.m_ivalue + member this.SValue = this.m_svalue + end + + [] + let `` Unchecked defaultof reference types``() = + Assert.areEqual Unchecked.defaultof null + Assert.areEqual (box Unchecked.defaultof) null + Assert.areEqual (box Unchecked.defaultof) null + Assert.areEqual (box Unchecked.defaultof) null + + [] + let ``Unchecked defaultof stack types``() = + Assert.areEqual Unchecked.defaultof 0 + Assert.areEqual Unchecked.defaultof 0.0 + Assert.areEqual Unchecked.defaultof (enum 0) + Assert.areEqual Unchecked.defaultof.IValue 0 + Assert.areEqual Unchecked.defaultof.SValue null \ No newline at end of file diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index b06425e88dc..095b2c959ec 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -75,6 +75,7 @@ + diff --git a/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf01.fs b/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf01.fs deleted file mode 100644 index 196448fc4bf..00000000000 --- a/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf01.fs +++ /dev/null @@ -1,51 +0,0 @@ -// #Regression #Libraries #Unchecked -#light - -// 1760, Implement Unchecked.defaultof<_> (delete LanguagePrimitives.DefaultValueUnchecked) - -// Test the 'defaultof<_>' function - -// Reference types --------------------------- -type DUType = - | A - | B of int - | C of DUType * DUType - -type RecordType = { A : int; B : string; C : DUType } - -type ClassType = string - -type InterfaceType = - abstract DoStuff : unit -> unit - -// Stack types ------------------------------- -type EnumType = - | A = 1 - | B = 2 - | C = 4 - -type StructType = struct - val m_ivalue : int - val m_svalue : string - member this.IValue = this.m_ivalue - member this.SValue = this.m_svalue -end - -// Test reference types -if Unchecked.defaultof <> null then exit 1 -// This behaivor for DU, Records, and Interfaces is bey design (need to box to get null) -if box(Unchecked.defaultof) <> null then exit 1 -if box(Unchecked.defaultof) <> null then exit 1 -if box(Unchecked.defaultof) <> null then exit 1 - -let p = Unchecked.defaultof - -// Test stack types -if Unchecked.defaultof <> 0 then exit 1 -if Unchecked.defaultof <> 0.0 then exit 1 -if Unchecked.defaultof <> enum 0 then exit 1 - -if (Unchecked.defaultof).IValue <> 0 then exit 1 -if (Unchecked.defaultof).SValue <> null then exit 1 - -exit 0 diff --git a/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst b/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst index b5cefff3c2e..3639254bb62 100644 --- a/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst +++ b/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst @@ -1,2 +1 @@ - SOURCE=DefaultOf01.fs # DefaultOf01 SOURCE=DefaultOf02.fs # DefaultOf02 \ No newline at end of file From aef4e1943eec7a36291cb34821357406be0cb011 Mon Sep 17 00:00:00 2001 From: "Thorsten (Gerbrunn)" Date: Sat, 27 Jun 2020 12:22:48 +0200 Subject: [PATCH 2/3] Migraded Unchecked/DefaultOf02.fs test case --- .../Libraries/Core/Unchecked/UncheckedTests.fs | 18 +++++++++++++++++- .../Libraries/Core/Unchecked/DefaultOf02.fs | 17 ----------------- .../Source/Libraries/Core/Unchecked/env.lst | 1 - 3 files changed, 17 insertions(+), 19 deletions(-) delete mode 100644 tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf02.fs delete mode 100644 tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst diff --git a/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs b/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs index 781f6e5f2ff..14f3ce9dc3d 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs @@ -44,4 +44,20 @@ module ``Unchecked Tests`` = Assert.areEqual Unchecked.defaultof 0.0 Assert.areEqual Unchecked.defaultof (enum 0) Assert.areEqual Unchecked.defaultof.IValue 0 - Assert.areEqual Unchecked.defaultof.SValue null \ No newline at end of file + Assert.areEqual Unchecked.defaultof.SValue null + + type R = { x : int; y : string } + type U = | A of int | B of string + type S = struct val mutable x : int end + type C() = class end + + [] + let ``Unchecked defaultof and equality``() = + // FSharp1.0:5417 - Unchecked.defaultof<_> on records/unions can cause structural equality check to throw + // Check that Unchecked.defaultof<_> works correctly on various types, mostly structs/unions/records + + Assert.areEqual Unchecked.defaultof Unchecked.defaultof + Assert.areEqual Unchecked.defaultof Unchecked.defaultof + Assert.areEqual Unchecked.defaultof Unchecked.defaultof + Assert.areEqual Unchecked.defaultof Unchecked.defaultof + Assert.areEqual Unchecked.defaultof Unchecked.defaultof \ No newline at end of file diff --git a/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf02.fs b/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf02.fs deleted file mode 100644 index 00414dd8cc8..00000000000 --- a/tests/fsharpqa/Source/Libraries/Core/Unchecked/DefaultOf02.fs +++ /dev/null @@ -1,17 +0,0 @@ -// #Regression #Libraries #Unchecked -#light - -// FSharp1.0:5417 - Unchecked.defaultof<_> on records/unions can cause structural equality check to throw -// Check that Unchecked.defaultof<_> works correctly on various types, mostly structs/unions/records - -type R = { x : int; y : string } -type U = | A of int | B of string -type S = struct val mutable x : int end -type C() = class end - -let shouldBeTrue = - Unchecked.defaultof = Unchecked.defaultof // Records as null - && Unchecked.defaultof = Unchecked.defaultof // Unions as null - && Unchecked.defaultof = Unchecked.defaultof // Structs as null - && Unchecked.defaultof = Unchecked.defaultof // Classes as null - && Unchecked.defaultof = Unchecked.defaultof diff --git a/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst b/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst deleted file mode 100644 index 3639254bb62..00000000000 --- a/tests/fsharpqa/Source/Libraries/Core/Unchecked/env.lst +++ /dev/null @@ -1 +0,0 @@ - SOURCE=DefaultOf02.fs # DefaultOf02 \ No newline at end of file From 3fef165db1e693ca991fdd80f61f0d329b58fce5 Mon Sep 17 00:00:00 2001 From: "Thorsten (Gerbrunn)" Date: Sat, 27 Jun 2020 13:12:05 +0200 Subject: [PATCH 3/3] Fixed naming --- .../Core/Unchecked/{UncheckedTests.fs => DefaultOfTests.fs} | 2 +- tests/fsharp/FSharpSuite.Tests.fsproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename tests/fsharp/Compiler/Libraries/Core/Unchecked/{UncheckedTests.fs => DefaultOfTests.fs} (98%) diff --git a/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs b/tests/fsharp/Compiler/Libraries/Core/Unchecked/DefaultOfTests.fs similarity index 98% rename from tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs rename to tests/fsharp/Compiler/Libraries/Core/Unchecked/DefaultOfTests.fs index 14f3ce9dc3d..7c732e479ad 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Unchecked/UncheckedTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Unchecked/DefaultOfTests.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework [] -module ``Unchecked Tests`` = +module ``DefaultOf Tests`` = type DUType = | A diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 095b2c959ec..3153783ff71 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -75,7 +75,7 @@ - +