Skip to content

Commit b5f5f6a

Browse files
adding basic test around ILMemberAccess items being comparable to each other
1 parent 8f94aff commit b5f5f6a

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
namespace FSharp.Compiler.UnitTests
2+
open FSharp.Reflection
3+
open NUnit.Framework
4+
5+
[<TestFixture>]
6+
module ILMemberAccessTests =
7+
open FSharp.Compiler.AbstractIL.IL
8+
[<Test>]
9+
let ``ILMemberAccess exhaustively OK for comparison`` () =
10+
11+
let allCases =
12+
let allCasesInfos = FSharpType.GetUnionCases (typeof<ILMemberAccess>)
13+
allCasesInfos
14+
|> Array.map (fun caseInfo ->
15+
FSharpValue.MakeUnion(caseInfo, [||]) :?> ILMemberAccess
16+
)
17+
|> Set.ofArray
18+
19+
let addItem, checkedCases =
20+
let mutable items = Set.empty
21+
(fun item -> items <- Set.add item items)
22+
, (fun () -> items)
23+
24+
let expectedComparisons =
25+
let rec cummulativeSum n =
26+
match n with
27+
| 0 | 1 -> 1
28+
| _ -> n + cummulativeSum(n-1)
29+
cummulativeSum (allCases.Count - 1)
30+
31+
let mutable comparisonsCount = 0
32+
let compareIsGreater a b =
33+
if a > b then
34+
addItem a
35+
addItem b
36+
comparisonsCount <- comparisonsCount + 1
37+
else
38+
failwithf "%A > %A didn't hold" a b
39+
40+
compareIsGreater ILMemberAccess.Public ILMemberAccess.Family
41+
compareIsGreater ILMemberAccess.Public ILMemberAccess.FamilyOrAssembly
42+
compareIsGreater ILMemberAccess.Public ILMemberAccess.Assembly
43+
compareIsGreater ILMemberAccess.Public ILMemberAccess.FamilyAndAssembly
44+
compareIsGreater ILMemberAccess.Public ILMemberAccess.Private
45+
compareIsGreater ILMemberAccess.Public ILMemberAccess.CompilerControlled
46+
compareIsGreater ILMemberAccess.Family ILMemberAccess.FamilyOrAssembly
47+
compareIsGreater ILMemberAccess.Family ILMemberAccess.Assembly
48+
compareIsGreater ILMemberAccess.Family ILMemberAccess.FamilyAndAssembly
49+
compareIsGreater ILMemberAccess.Family ILMemberAccess.Private
50+
compareIsGreater ILMemberAccess.Family ILMemberAccess.CompilerControlled
51+
compareIsGreater ILMemberAccess.FamilyOrAssembly ILMemberAccess.Assembly
52+
compareIsGreater ILMemberAccess.FamilyOrAssembly ILMemberAccess.FamilyAndAssembly
53+
compareIsGreater ILMemberAccess.FamilyOrAssembly ILMemberAccess.Private
54+
compareIsGreater ILMemberAccess.FamilyOrAssembly ILMemberAccess.CompilerControlled
55+
compareIsGreater ILMemberAccess.Assembly ILMemberAccess.FamilyAndAssembly
56+
compareIsGreater ILMemberAccess.Assembly ILMemberAccess.Private
57+
compareIsGreater ILMemberAccess.Assembly ILMemberAccess.CompilerControlled
58+
compareIsGreater ILMemberAccess.FamilyAndAssembly ILMemberAccess.Private
59+
compareIsGreater ILMemberAccess.FamilyAndAssembly ILMemberAccess.CompilerControlled
60+
compareIsGreater ILMemberAccess.Private ILMemberAccess.CompilerControlled
61+
62+
let checkedCases = checkedCases ()
63+
Assert.IsTrue((checkedCases = allCases), sprintf "all cases weren't checked: %A versus %A" checkedCases allCases)
64+
Assert.AreEqual(expectedComparisons, comparisonsCount)

tests/fsharp/FSharpSuite.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<Compile Include="single-test.fs" />
2828
<Compile Include="TypeProviderTests.fs" />
2929
<Compile Include="tests.fs" />
30+
<Compile Include="Compiler\ILMemberAccessTests.fs" />
3031
<Compile Include="Compiler\CodeGen\EmittedIL\StaticMember.fs" />
3132
<Compile Include="Compiler\CodeGen\EmittedIL\StaticLinkTests.fs" />
3233
<Compile Include="Compiler\CodeGen\EmittedIL\LiteralValue.fs" />

0 commit comments

Comments
 (0)