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)
0 commit comments