@@ -122,16 +122,34 @@ type LanguagePrimitivesModule() =
122122member this.GenericComparisonBiModal () =
123123
124124// value type
125+ let resultValue = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default100 1
126+ Assert.AreEqual( resultValue, 1 )
127+
125128let resultValue = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default1 1
126129 Assert.AreEqual( resultValue, 0 )
130+
131+ let resultValue = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default1 200
132+ Assert.AreEqual( resultValue,- 1 )
127133
128134// reference type
129- let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default" ABC" " ABCDE"
130- Assert.AreEqual( resultRef,- 68 )
135+ let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default" ABCDE" " ABC"
136+ Assert.AreEqual( resultRef, 68 )
137+
138+ let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default" ABC" " ABC"
139+ Assert.AreEqual( resultRef, 0 )
140+
141+ let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default" abc" " abcde"
142+ Assert.AreEqual( resultRef,- 100 )
131143
132144// null reference
133145let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Default" ABC" null
134146 Assert.AreEqual( resultRef, 1 )
147+
148+ let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Defaultnull null
149+ Assert.AreEqual( resultRef, 0 )
150+
151+ let resultRef = LanguagePrimitives.GenericComparisonWithComparer System.Collections.Comparer.Defaultnull " abc"
152+ Assert.AreEqual( resultRef,- 1 )
135153
136154()
137155#endif
@@ -143,14 +161,23 @@ type LanguagePrimitivesModule() =
143161// value type
144162let resultValue = LanguagePrimitives.GenericEquality1 1
145163 Assert.IsTrue( resultValue)
164+
165+ let resultValue = LanguagePrimitives.GenericEquality1 2
166+ Assert.IsFalse( resultValue)
146167
147168// reference type
169+ let resultRef = LanguagePrimitives.GenericEquality" ABC" " ABC"
170+ Assert.IsTrue( resultRef)
171+
148172let resultRef = LanguagePrimitives.GenericEquality" ABC" " ABCDE"
149173 Assert.IsFalse( resultRef)
150174
151175// null reference
152176let resultNul = LanguagePrimitives.GenericEqualitynull null
153177 Assert.IsTrue( resultNul)
178+
179+ let resultNul = LanguagePrimitives.GenericEquality" ABC" null
180+ Assert.IsFalse( resultNul)
154181
155182()
156183
@@ -160,14 +187,29 @@ type LanguagePrimitivesModule() =
160187// value type
161188let resultValue = LanguagePrimitives.GenericGreaterOrEqual1 1
162189 Assert.IsTrue( resultValue)
190+
191+ let resultValue = LanguagePrimitives.GenericGreaterOrEqual2 1
192+ Assert.IsTrue( resultValue)
193+
194+ let resultValue = LanguagePrimitives.GenericGreaterOrEqual1 2
195+ Assert.IsFalse( resultValue)
163196
164197// reference type
165- let resultRef = LanguagePrimitives.GenericEquality" ABC" " ABCDE"
198+ let resultRef = LanguagePrimitives.GenericGreaterOrEqual" abcde" " abc"
199+ Assert.IsTrue( resultRef)
200+
201+ let resultRef = LanguagePrimitives.GenericGreaterOrEqual" ABCDE" " ABCDE"
202+ Assert.IsTrue( resultRef)
203+
204+ let resultRef = LanguagePrimitives.GenericGreaterOrEqual" ABC" " ABCDE"
166205 Assert.IsFalse( resultRef)
167206
168207// null reference
169- let resultNul = LanguagePrimitives.GenericEquality null null
208+ let resultNul = LanguagePrimitives.GenericGreaterOrEqual null null
170209 Assert.IsTrue( resultNul)
210+
211+ let resultNul = LanguagePrimitives.GenericGreaterOrEqualnull " ABCDE"
212+ Assert.IsFalse( resultNul)
171213
172214()
173215
@@ -178,14 +220,29 @@ type LanguagePrimitivesModule() =
178220// value type
179221let resultValue = LanguagePrimitives.GenericGreaterThan1 1
180222 Assert.IsFalse( resultValue)
223+
224+ let resultValue = LanguagePrimitives.GenericGreaterThan2 1
225+ Assert.IsTrue( resultValue)
181226
182227// reference type
183228let resultRef = LanguagePrimitives.GenericGreaterThan" ABC" " ABCDE"
184229 Assert.IsFalse( resultRef)
230+
231+ let resultRef = LanguagePrimitives.GenericGreaterThan" ABCDE" " ABCDE"
232+ Assert.IsFalse( resultRef)
233+
234+ let resultRef = LanguagePrimitives.GenericGreaterThan" abc" " a"
235+ Assert.IsTrue( resultRef)
185236
186237// null reference
187238let resultNul = LanguagePrimitives.GenericGreaterThannull null
188239 Assert.IsFalse( resultNul)
240+
241+ let resultNul = LanguagePrimitives.GenericGreaterThannull " ABC"
242+ Assert.IsFalse( resultNul)
243+
244+ let resultNul = LanguagePrimitives.GenericGreaterThan" ABC" null
245+ Assert.IsTrue( resultNul)
189246
190247()
191248
@@ -196,6 +253,11 @@ type LanguagePrimitivesModule() =
196253// value type
197254let resultValue = LanguagePrimitives.GenericHash1
198255 Assert.AreEqual( 1 , resultValue)
256+
257+ // using standard .NET GetHashCode as oracle
258+ let resultValue = LanguagePrimitives.GenericHash1000
259+ let x = 1000
260+ Assert.AreEqual( x.GetHashCode(), resultValue)
199261
200262// reference type
201263let resultRef = LanguagePrimitives.GenericHash" ABC"
@@ -214,14 +276,32 @@ type LanguagePrimitivesModule() =
214276// value type
215277let resultValue = LanguagePrimitives.GenericLessOrEqual1 1
216278 Assert.IsTrue( resultValue)
279+
280+ let resultValue = LanguagePrimitives.GenericLessOrEqual1 2
281+ Assert.IsTrue( resultValue)
282+
283+ let resultValue = LanguagePrimitives.GenericLessOrEqual- 1 0
284+ Assert.IsTrue( resultValue)
217285
218286// reference type
219287let resultRef = LanguagePrimitives.GenericLessOrEqual" ABC" " ABCDE"
220288 Assert.IsTrue( resultRef)
289+
290+ let resultRef = LanguagePrimitives.GenericLessOrEqual" ABCDE" " ABCDE"
291+ Assert.IsTrue( resultRef)
292+
293+ let resultRef = LanguagePrimitives.GenericLessOrEqual" abcde" " abc"
294+ Assert.IsFalse( resultRef)
221295
222296// null reference
223297let resultNul = LanguagePrimitives.GenericLessOrEqualnull null
224298 Assert.IsTrue( resultNul)
299+
300+ let resultNul = LanguagePrimitives.GenericLessOrEqualnull " abc"
301+ Assert.IsTrue( resultNul)
302+
303+ let resultNul = LanguagePrimitives.GenericLessOrEqual" abc" null
304+ Assert.IsFalse( resultNul)
225305
226306()
227307
@@ -231,15 +311,33 @@ type LanguagePrimitivesModule() =
231311
232312// value type
233313let resultValue = LanguagePrimitives.GenericLessThan1 1
234- Assert.AreEqual( resultValue, false )
314+ Assert.IsFalse( resultValue)
315+
316+ let resultValue = LanguagePrimitives.GenericLessThan- 2 - 4
317+ Assert.IsFalse( resultValue)
318+
319+ let resultValue = LanguagePrimitives.GenericLessThan1 2
320+ Assert.IsTrue( resultValue)
235321
236322// reference type
237323let resultRef = LanguagePrimitives.GenericLessThan" ABC" " ABCDE"
238- Assert.AreEqual( resultRef, true )
324+ Assert.IsTrue( resultRef)
325+
326+ let resultRef = LanguagePrimitives.GenericLessThan" ABC" " ABC"
327+ Assert.IsFalse( resultRef)
328+
329+ let resultRef = LanguagePrimitives.GenericLessThan" abc" " a"
330+ Assert.IsFalse( resultRef)
239331
240332// null reference
333+ let resultNul = LanguagePrimitives.GenericLessThannull " abc"
334+ Assert.IsTrue( resultNul)
335+
336+ let resultNul = LanguagePrimitives.GenericLessThan" aa" null
337+ Assert.IsFalse( resultNul)
338+
241339let resultNul = LanguagePrimitives.GenericLessThannull null
242- Assert.AreEqual ( resultNul, false )
340+ Assert.IsFalse ( resultNul)
243341
244342()
245343
@@ -249,14 +347,27 @@ type LanguagePrimitivesModule() =
249347// value type
250348let resultValue = LanguagePrimitives.GenericMaximum8 9
251349 Assert.AreEqual( resultValue, 9 )
350+
351+ let resultValue = LanguagePrimitives.GenericMaximum- 800 - 900
352+ Assert.AreEqual( resultValue,- 800 )
252353
253354// reference type
254355let resultRef = LanguagePrimitives.GenericMaximum" ABC" " ABCDE"
356+ Assert.AreEqual( resultRef, " ABCDE" )
357+
358+ let resultRef = LanguagePrimitives.GenericMaximum" ABCDE" " ABC"
255359 Assert.AreEqual( resultRef, " ABCDE" )
256360
361+
257362// null reference
258363let resultNul = LanguagePrimitives.GenericMaximumnull null
259364 Assert.AreEqual( resultNul, null )
365+
366+ let resultNul = LanguagePrimitives.GenericMaximumnull " ABCDE"
367+ Assert.AreEqual( resultNul, " ABCDE" )
368+
369+ let resultNul = LanguagePrimitives.GenericMaximum" ABCDE" null
370+ Assert.AreEqual( resultNul, " ABCDE" )
260371
261372()
262373
@@ -266,19 +377,38 @@ type LanguagePrimitivesModule() =
266377// value type
267378let resultValue = LanguagePrimitives.GenericMinimum8 9
268379 Assert.AreEqual( resultValue, 8 )
380+
381+ let resultValue = LanguagePrimitives.GenericMinimum- 800 - 900
382+ Assert.AreEqual( resultValue,- 900 )
269383
270384// reference type
271385let resultRef = LanguagePrimitives.GenericMinimum" ABC" " ABCDE"
272386 Assert.AreEqual( resultRef, " ABC" )
387+
388+ let resultRef = LanguagePrimitives.GenericMinimum" abcde" " abc"
389+ Assert.AreEqual( resultRef, " abc" )
273390
274391// null reference
275392let resultNul = LanguagePrimitives.GenericMinimumnull null
276393 Assert.AreEqual( resultNul, null )
394+
395+ let resultNul = LanguagePrimitives.GenericMinimumnull " ABC"
396+ Assert.AreEqual( resultNul, null )
397+
398+ let resultNul = LanguagePrimitives.GenericMinimum" ABC" null
399+ Assert.AreEqual( resultNul, null )
277400
278401()
279402
280403[<Test>]
281404member this.GenericOne () =
405+ // int type
406+ let resultValue = LanguagePrimitives.GenericOne< int>
407+ Assert.AreEqual( resultValue, 1 )
408+
409+ // float type
410+ let resultValue = LanguagePrimitives.GenericOne< float>
411+ Assert.AreEqual( resultValue, 1. )
282412
283413// bigint type
284414let resultValue = LanguagePrimitives.GenericOne< bigint>
@@ -288,6 +418,13 @@ type LanguagePrimitivesModule() =
288418
289419[<Test>]
290420member this.GenericZero () =
421+ // int type
422+ let resultValue = LanguagePrimitives.GenericZero< int>
423+ Assert.AreEqual( resultValue, 0 )
424+
425+ // float type
426+ let resultValue = LanguagePrimitives.GenericZero< float>
427+ Assert.AreEqual( resultValue, 0. )
291428
292429// bigint type
293430let resultValue = LanguagePrimitives.GenericZero< bigint>
@@ -299,7 +436,19 @@ type LanguagePrimitivesModule() =
299436member this.ParseInt32 () =
300437
301438let resultValue = LanguagePrimitives.ParseInt32" 100"
439+ Assert.AreEqual( resultValue.GetType(), typeof< int>)
302440 Assert.AreEqual( resultValue, 100 )
441+
442+ let resultValue = LanguagePrimitives.ParseInt32" -123"
443+ Assert.AreEqual( resultValue,- 123 )
444+
445+ let resultValue = LanguagePrimitives.ParseInt32" 0"
446+ Assert.AreEqual( resultValue, 0 )
447+
448+
449+ CheckThrowsOverflowException( fun () -> LanguagePrimitives.ParseInt32" -100000000000000000" |> ignore)
450+
451+ CheckThrowsFormatException( fun () -> LanguagePrimitives.ParseInt32" " |> ignore)
303452
304453 CheckThrowsArgumentNullException( fun () -> LanguagePrimitives.ParseInt32null |> ignore)
305454
@@ -309,7 +458,16 @@ type LanguagePrimitivesModule() =
309458member this.ParseInt64 () =
310459
311460let resultValue = LanguagePrimitives.ParseInt64" 100"
312- Assert.AreEqual( resultValue, 100 L)
461+ Assert.AreEqual( resultValue.GetType(), typeof< int64>)
462+ Assert.AreEqual( resultValue, 100 L)
463+
464+ let resultValue = LanguagePrimitives.ParseInt64" -100000000000000000"
465+ Assert.AreEqual( resultValue,- 100000000000000000 L)
466+
467+ let resultValue = LanguagePrimitives.ParseInt64" 0"
468+ Assert.AreEqual( resultValue, 0 )
469+
470+ CheckThrowsFormatException( fun () -> LanguagePrimitives.ParseInt64" " |> ignore)
313471
314472 CheckThrowsArgumentNullException( fun () -> LanguagePrimitives.ParseInt64null |> ignore)
315473
@@ -319,8 +477,10 @@ type LanguagePrimitivesModule() =
319477member this.ParseUInt32 () =
320478
321479let resultValue = LanguagePrimitives.ParseUInt32" 100"
480+ Assert.AreEqual( resultValue.GetType(), typeof< uint32>)
322481 Assert.AreEqual( resultValue, 100 ul)
323482
483+ CheckThrowsOverflowException( fun () -> LanguagePrimitives.ParseUInt32" -1" |> ignore)
324484
325485 CheckThrowsArgumentNullException( fun () -> LanguagePrimitives.ParseUInt32null |> ignore)
326486
@@ -330,7 +490,10 @@ type LanguagePrimitivesModule() =
330490member this.ParseUInt64 () =
331491
332492let resultValue = LanguagePrimitives.ParseUInt64" 100"
493+ Assert.AreEqual( resultValue.GetType(), typeof< uint64>)
333494 Assert.AreEqual( resultValue, 100 UL)
495+
496+ CheckThrowsOverflowException( fun () -> LanguagePrimitives.ParseUInt64" -1" |> ignore)
334497
335498 CheckThrowsArgumentNullException( fun () -> LanguagePrimitives.ParseUInt64null |> ignore)
336499
@@ -464,21 +627,6 @@ type HashCompareModule() = // this module is internal/obsolete, but contains cod
464627let mt = 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z'
465628let mt2 = 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z'
466629 Assert.AreEqual( mt, mt2)
467-
468- [<TestFixture>]
469- type IntrinsicFunctionsModule () =
470- [<Test>]
471- member this.Obsolete () =
472- // all method obsoleted and inlined
473- ()
474-
475-
476- [<TestFixture>]
477- type IntrinsicOperatorsModule () =
478- [<Test>]
479- member this.Obsolete () =
480- // all method obsoleted and inlined
481- ()
482630
483631[<TestFixture>]
484632type UnitType () =