11// 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.
2-
32namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core
43
54open System
6- open System.Numerics
5+ open System.Numerics
76open FSharp.Core .Unittests .LibraryTestFx
87open NUnit.Framework
98
109type EnumUnion =
11- | A
12- | B
10+ | A
11+ | B
1312
1413[<TestFixture>]
15- type UseUnionsAsEnums () =
14+ type UseUnionsAsEnums () =
1615[<Test>]
17- member this.CanCompare () =
16+ member this.CanCompare () =
1817 Assert.AreEqual( EnumUnion.B, EnumUnion.B)
1918 Assert.AreNotEqual( EnumUnion.A, EnumUnion.B)
2019
2120[<Flags>]
2221type FlagsUnion =
23- | One= 1
24- | Two= 2
25- | Four= 4
22+ | One= 1
23+ | Two= 2
24+ | Four= 4
2625
2726[<TestFixture>]
28- type UseUnionsAsFlags () =
27+ type UseUnionsAsFlags () =
28+
2929[<Test>]
30- member this.CanCompareWithInts () =
30+ member this.CanCompareWithInts () =
3131 Assert.AreEqual( int FlagsUnion.One, 1 )
3232 Assert.AreEqual( int FlagsUnion.Two, 2 )
3333 Assert.AreEqual( int FlagsUnion.Four, 4 )
34-
34+
35+ [<Test>]
36+ member this.CanCastFromInts () =
37+ let four : FlagsUnion = enum 4
38+ Assert.AreEqual( four, FlagsUnion.Four)
39+
3540[<Test>]
36- member this.CanUseBinaryOr () =
41+ member this.CanCreateValuesWithoutName () =
42+ let unknown : FlagsUnion = enum 99 // strange, but valid
43+ Assert.AreEqual( int unknown, 99 )
44+
45+ [<Test>]
46+ member this.CanParseViaBCL () =
47+ let values = System.Enum.GetValues( typeof< FlagsUnion>)
48+ let fourFromString = System.Enum.Parse( typeof< FlagsUnion>, " Four" ) :?> FlagsUnion// downcast needed
49+ Assert.AreEqual( fourFromString, FlagsUnion.Four)
50+
51+ [<Test>]
52+ member this.CanUseBinaryOr () =
3753 Assert.AreEqual( int( FlagsUnion.One||| FlagsUnion.Two), 3 )
38-
54+ Assert.AreEqual( int( FlagsUnion.One||| FlagsUnion.One), 1 )
55+
3956[<Test>]
40- member this.CanCompareWithFlags () =
57+ member this.CanCompareWithFlags () =
4158 Assert.AreEqual( FlagsUnion.Two, FlagsUnion.Two)
4259 Assert.AreNotEqual( FlagsUnion.Two, FlagsUnion.One)
4360
4461type UnionsWithData =
45- | Alphaof int
46- | Betaof string * float
62+ | Alphaof int
63+ | Betaof string * float
4764
4865[<TestFixture>]
49- type UseUnionsWithData () =
66+ type UseUnionsWithData () =
5067let a1 = Alpha1
5168let a2 = Alpha2
52- let b1 = Beta( " win" , 8.1 )
53-
69+ let b1 = Beta( " win" , 8.1 )
70+
5471[<Test>]
55- member this.CanAccessTheData () =
72+ member this.CanAccessTheData () =
5673match a1with
5774| Alpha1 -> ()
5875| _ -> Assert.Fail()
59-
6076match a2with
6177| Alpha2 -> ()
6278| _ -> Assert.Fail()
63-
6479match a2with
65- | Alpha x-> Assert.AreEqual( x, 2 )
80+ | Alpha x-> Assert.AreEqual( x, 2 )
6681| _ -> Assert.Fail()
67-
6882match b1with
69- | Beta( " win" , 8.1 ) -> ()
83+ | Beta( " win" , 8.1 ) -> ()
7084| _ -> Assert.Fail()
71-
7285match b1with
73- | Beta( x, y) ->
74- Assert.AreEqual( x, " win" )
75- Assert.AreEqual( y, 8.1 )
86+ | Beta( x, y) ->
87+ Assert.AreEqual( x, " win" )
88+ Assert.AreEqual( y, 8.1 )
7689| _ -> Assert.Fail()
77-
90+
7891[<Test>]
79- member this.CanAccessTheDataInGuards () =
92+ member this.CanAccessTheDataInGuards () =
8093match a1with
8194| Alpha xwhen x= 1 -> ()
8295| _ -> Assert.Fail()
83-
8496match a2with
85- | Alpha xwhen x= 2 -> ()
97+ | Alpha xwhen x= 2 -> ()
8698| _ -> Assert.Fail()