1- // Copyright (C) 2003-2010 Xtensive LLC.
2- // All rights reserved .
3- // For conditions of distribution and use, see license .
1+ // Copyright (C) 2007-2021 Xtensive LLC.
2+ // This code is distributed under MIT license terms .
3+ // See the License.txt file in the project root for more information .
44// Created by: Alex Yakunin
55// Created: 2007.12.17
66
77using System ;
8+ using System . Collections . Generic ;
9+ using System . Globalization ;
810using System . Reflection ;
911using NUnit . Framework ;
1012using Xtensive . Comparison ;
@@ -26,7 +28,33 @@ public void PairComparerTest()
2628 [ Test ]
2729 public void SerializationTest ( )
2830 {
29- AdvancedComparer < short > comparer = AdvancedComparer < short > . Default ;
31+ SerializationTest < int [ ] > ( ) ;
32+ SerializationTest < Guid > ( ) ;
33+ SerializationTest < bool > ( ) ;
34+ SerializationTest < byte > ( ) ;
35+ SerializationTest < sbyte > ( ) ;
36+ SerializationTest < short > ( ) ;
37+ SerializationTest < int > ( ) ;
38+ SerializationTest < long > ( ) ;
39+ SerializationTest < ushort > ( ) ;
40+ SerializationTest < uint > ( ) ;
41+ SerializationTest < ulong > ( ) ;
42+ SerializationTest < float > ( ) ;
43+ SerializationTest < double > ( ) ;
44+ SerializationTest < decimal > ( ) ;
45+ SerializationTest < Direction > ( ) ;
46+ SerializationTest < IEnumerable < int > > ( ) ;
47+ SerializationTest < char > ( ) ;
48+ SerializationTest < string > ( ) ;
49+ SerializationTest < short ? > ( ) ;
50+ SerializationTest < Pair < int > > ( ) ;
51+ SerializationTest < Pair < int , long > > ( ) ;
52+ SerializationTest < Xtensive . Tuples . Tuple > ( ) ;
53+ }
54+
55+ private void SerializationTest < T > ( )
56+ {
57+ var comparer = AdvancedComparer < T > . Default ;
3058 Assert . IsNotNull ( comparer . Compare ) ;
3159 var deserializedComparer = Cloner . Clone ( comparer ) ;
3260 Assert . IsNotNull ( deserializedComparer . Compare ) ;
@@ -38,50 +66,51 @@ public void SerializationTest()
3866 public void GettingDefaultComparerPerformanceTest ( )
3967 {
4068 GettingDefaultComparerLoop ( 100 ) ;
41- int count = 1000000 ;
69+ var count = 1000000 ;
4270 using ( new Measurement ( "Getting default comparer" , count ) ) {
4371 GettingDefaultComparerLoop ( count ) ;
4472 }
4573 }
4674
4775 private static void GettingDefaultComparerLoop ( int count )
4876 {
49- for ( int i = 0 ; i < count ; i ++ ) {
50- ComparerProvider . Default . GetComparer < bool > ( ) ;
51- ComparerProvider . Default . GetComparer < byte > ( ) ;
52- ComparerProvider . Default . GetComparer < char > ( ) ;
53- ComparerProvider . Default . GetComparer < short > ( ) ;
54- ComparerProvider . Default . GetComparer < ushort > ( ) ;
55- ComparerProvider . Default . GetComparer < int > ( ) ;
56- ComparerProvider . Default . GetComparer < uint > ( ) ;
57- ComparerProvider . Default . GetComparer < long > ( ) ;
58- ComparerProvider . Default . GetComparer < ulong > ( ) ;
59- ComparerProvider . Default . GetComparer < string > ( ) ;
77+ for ( var i = 0 ; i < count ; i ++ ) {
78+ _ = ComparerProvider . Default . GetComparer < bool > ( ) ;
79+ _ = ComparerProvider . Default . GetComparer < byte > ( ) ;
80+ _ = ComparerProvider . Default . GetComparer < char > ( ) ;
81+ _ = ComparerProvider . Default . GetComparer < short > ( ) ;
82+ _ = ComparerProvider . Default . GetComparer < ushort > ( ) ;
83+ _ = ComparerProvider . Default . GetComparer < int > ( ) ;
84+ _ = ComparerProvider . Default . GetComparer < uint > ( ) ;
85+ _ = ComparerProvider . Default . GetComparer < long > ( ) ;
86+ _ = ComparerProvider . Default . GetComparer < ulong > ( ) ;
87+ _ = ComparerProvider . Default . GetComparer < string > ( ) ;
6088 }
6189 }
6290
6391
6492 private class TestClass
6593 {
94+ #pragma warning disable IDE0044 , IDE0051 // Add readonly modifier + Remove unused private members
6695 private string x ;
6796 private int y ;
97+ #pragma warning restore IDE0044 , IDE0051 // Add readonly modifier + Remove unused private members
6898 }
69-
7099
71100 [ Test ]
72101 public void ClassTest ( )
73102 {
74- AdvancedComparerStruct < TestClass > dd = AdvancedComparerStruct < TestClass > . System ;
103+ _ = AdvancedComparerStruct < TestClass > . System ;
75104 }
76105
77106 [ Test ]
78107 public void Int32ComparerTest ( )
79108 {
80- int o1 = 1 ;
81- int o2 = 2 ;
82- AdvancedComparer < int > comparer = AdvancedComparer < int > . Default ;
109+ var o1 = 1 ;
110+ var o2 = 2 ;
111+ var comparer = AdvancedComparer < int > . Default ;
83112 Assert . IsNotNull ( comparer ) ;
84- Assert . AreEqual ( " Int32Comparer" , comparer . Implementation . GetType ( ) . Name ) ;
113+ Assert . AreEqual ( nameof ( Int32Comparer ) , comparer . Implementation . GetType ( ) . Name ) ;
85114 Assert . Greater ( comparer . Compare ( o2 , o1 ) , 0 ) ;
86115 Assert . IsTrue ( comparer . ValueRangeInfo . HasMinValue ) ;
87116 Assert . IsTrue ( comparer . ValueRangeInfo . HasMaxValue ) ;
@@ -95,22 +124,22 @@ public void Int32ComparerTest()
95124 [ Test ]
96125 public void StringComparerTest ( )
97126 {
98- string o1 = "1" ;
99- string o2 = "2" ;
100- AdvancedComparer < string > comparer = AdvancedComparer < string > . Default ;
127+ var o1 = "1" ;
128+ var o2 = "2" ;
129+ var comparer = AdvancedComparer < string > . Default ;
101130 Assert . IsNotNull ( comparer ) ;
102131 Assert . AreEqual ( "StringComparer" , comparer . Implementation . GetType ( ) . Name ) ;
103132 Assert . Greater ( comparer . Compare ( o2 , o1 ) , 0 ) ;
104133 Assert . IsTrue ( comparer . ValueRangeInfo . HasMinValue ) ;
105134 Assert . IsFalse ( comparer . ValueRangeInfo . HasMaxValue ) ;
106135 Assert . AreEqual ( null , comparer . ValueRangeInfo . MinValue ) ;
107- AssertEx . ThrowsInvalidOperationException ( delegate { string s = comparer . ValueRangeInfo . MaxValue ; } ) ;
136+ AssertEx . ThrowsInvalidOperationException ( delegate { var s = comparer . ValueRangeInfo . MaxValue ; } ) ;
137+
138+ var z = char . MaxValue ;
139+ var y = unchecked ( ( char ) ( char . MaxValue - 1 ) ) ;
140+ var a = char . MinValue ;
108141
109- char z = char . MaxValue ;
110- char y = unchecked ( ( char ) ( char . MaxValue - 1 ) ) ;
111- char a = char . MinValue ;
112-
113- string str = "BCD" ;
142+ var str = "BCD" ;
114143 str = comparer . GetNearestValue ( str , Direction . Negative ) ;
115144 Assert . AreEqual ( "BCC" + z , str ) ;
116145 str = comparer . GetNearestValue ( str , Direction . Negative ) ;
@@ -135,95 +164,13 @@ public void StringComparerTest()
135164 Assert . IsNull ( comparer . GetNearestValue ( string . Empty , Direction . Negative ) ) ;
136165 Assert . AreEqual ( string . Empty , comparer . GetNearestValue ( null , Direction . Positive ) ) ;
137166 Assert . AreEqual ( char . MaxValue . ToString ( ) , comparer . GetNearestValue ( char . MaxValue . ToString ( ) , Direction . Positive ) ) ;
138- AssertEx . Throws < ArgumentOutOfRangeException > ( delegate { comparer . GetNearestValue ( str , Direction . None ) ; } ) ;
167+ AssertEx . Throws < ArgumentOutOfRangeException > ( delegate { _ = comparer . GetNearestValue ( str , Direction . None ) ; } ) ;
139168 }
140169
141- // [Test]
142- // public void EntireComparerTest()
143- // {
144- // AdvancedComparer<Entire<int>> comparer = AdvancedComparer<Entire<int>>.Default;
145- // Assert.IsNotNull(comparer);
146- // Assert.AreEqual("EntireComparer`1", comparer.Implementation.GetType().Name);
147- // Assert.AreEqual(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Positive), (Entire<int>)Entire<int>.Create(InfinityType.Positive)), 0);
148- // Assert.AreEqual(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Negative), (Entire<int>)Entire<int>.Create(InfinityType.Negative)), 0);
149- // Assert.Greater(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Positive), (Entire<int>)Entire<int>.Create(InfinityType.Negative)), 0);
150- // Assert.Greater(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Positive), (Entire<int>)Entire<int>.Create(100)), 0);
151- // Assert.Less(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Negative), (Entire<int>)Entire<int>.Create(InfinityType.Positive)), 0);
152- // Assert.Less(comparer.Compare((Entire<int>)Entire<int>.Create(InfinityType.Negative), (Entire<int>)Entire<int>.Create(100)), 0);
153- // Assert.IsTrue(comparer.ValueRangeInfo.HasMinValue);
154- // Assert.IsTrue(comparer.ValueRangeInfo.HasMaxValue);
155- // Assert.IsTrue(comparer.ValueRangeInfo.HasDeltaValue);
156- // Assert.AreEqual(Entire<int>.MinValue, comparer.ValueRangeInfo.MinValue);
157- // Assert.AreEqual(Entire<int>.MaxValue, comparer.ValueRangeInfo.MaxValue);
158- // Assert.AreEqual(Entire<int>.Create(1), comparer.ValueRangeInfo.DeltaValue);
159- // }
160-
161- // [Test]
162- // public void EntireInterfaceComparerTest()
163- // {
164- // AdvancedComparer<IEntire<int>> comparer = AdvancedComparer<IEntire<int>>.Default;
165- // Assert.IsNotNull(comparer);
166- // Assert.AreEqual("EntireInterfaceComparer`1", comparer.Implementation.GetType().Name);
167- // Assert.AreEqual(comparer.Compare(Entire<int>.Create(InfinityType.Positive), Entire<int>.Create(InfinityType.Positive)), 0);
168- // Assert.AreEqual(comparer.Compare(Entire<int>.Create(InfinityType.Negative), Entire<int>.Create(InfinityType.Negative)), 0);
169- // Assert.Greater(comparer.Compare(Entire<int>.Create(InfinityType.Positive), Entire<int>.Create(InfinityType.Negative)), 0);
170- // Assert.Greater(comparer.Compare(Entire<int>.Create(InfinityType.Positive), Entire<int>.Create(100)), 0);
171- // Assert.Less(comparer.Compare(Entire<int>.Create(InfinityType.Negative), Entire<int>.Create(InfinityType.Positive)), 0);
172- // Assert.Less(comparer.Compare(Entire<int>.Create(InfinityType.Negative), Entire<int>.Create(100)), 0);
173- // Assert.AreNotEqual(comparer.Compare(new Entire<int>(1, Direction.Positive), new Entire<int>(2)), 0);
174- // Assert.IsTrue(comparer.ValueRangeInfo.HasMinValue);
175- // Assert.IsTrue(comparer.ValueRangeInfo.HasMaxValue);
176- // Assert.IsTrue(comparer.ValueRangeInfo.HasDeltaValue);
177- // Assert.AreEqual(Entire<int>.MinValue, comparer.ValueRangeInfo.MinValue);
178- // Assert.AreEqual(Entire<int>.MaxValue, comparer.ValueRangeInfo.MaxValue);
179- // Assert.AreEqual(Entire<int>.Create(1), comparer.ValueRangeInfo.DeltaValue);
180- // }
181-
182- // [Test]
183- // public void ReversedComparerTest()
184- // {
185- // {
186- // AdvancedComparer<Reversed<int>> comparer = AdvancedComparer<Reversed<int>>.Default;
187- // Assert.IsNotNull(comparer);
188- // Assert.AreEqual("ReversedComparer`1", comparer.Implementation.GetType().Name);
189- // Assert.Less(comparer.Compare(10, 1), 0);
190- // Assert.Greater(comparer.Compare(1, 10), 0);
191- // Assert.AreEqual(comparer.Compare(10, 10), 0);
192- // Assert.IsTrue(comparer.ValueRangeInfo.HasMinValue);
193- // Assert.IsTrue(comparer.ValueRangeInfo.HasMaxValue);
194- // Assert.IsTrue(comparer.ValueRangeInfo.HasDeltaValue);
195- // Assert.AreEqual(new Reversed<int>(int.MaxValue), new Reversed<int>(int.MaxValue));
196- // Assert.AreEqual(new Reversed<int>(int.MaxValue), comparer.ValueRangeInfo.MinValue);
197- // Assert.AreEqual(new Reversed<int>(int.MinValue), comparer.ValueRangeInfo.MaxValue);
198- // Assert.AreEqual(new Reversed<int>(1), comparer.ValueRangeInfo.DeltaValue);
199- // }
200- //
201- // {
202- // AdvancedComparer<Reversed<int?>> comparer = AdvancedComparer<Reversed<int?>>.Default;
203- // Assert.IsNotNull(comparer);
204- // Assert.AreEqual("ReversedComparer`1", comparer.Implementation.GetType().Name);
205- // Assert.Less(comparer.Compare(10, 1), 0);
206- // Assert.Greater(comparer.Compare(1, 10), 0);
207- // Assert.AreEqual(comparer.Compare(10, 10), 0);
208- // Assert.Greater(comparer.Compare(1, 10), 0);
209- // Assert.Less(comparer.Compare(10, 1), 0);
210- // Assert.AreEqual(comparer.Compare(10, 10), 0);
211- // Assert.Greater(comparer.Compare(null, 10), 0);
212- // Assert.AreEqual(comparer.Compare(null, null), 0);
213- // Assert.Less(comparer.Compare(10, null), 0);
214- // Assert.IsTrue(comparer.ValueRangeInfo.HasMinValue);
215- // Assert.IsTrue(comparer.ValueRangeInfo.HasMaxValue);
216- // Assert.IsTrue(comparer.ValueRangeInfo.HasDeltaValue);
217- // Assert.AreEqual(new Reversed<int?>(int.MaxValue), comparer.ValueRangeInfo.MinValue);
218- // Assert.AreEqual(new Reversed<int?>(), comparer.ValueRangeInfo.MaxValue);
219- // Assert.AreEqual(new Reversed<int?>(1), comparer.ValueRangeInfo.DeltaValue);
220- // }
221- // }
222-
223170 [ Test ]
224171 public void NullableComparerTest ( )
225172 {
226- AdvancedComparer < int ? > comparer = AdvancedComparer < int ? > . Default ;
173+ var comparer = AdvancedComparer < int ? > . Default ;
227174 Assert . IsNotNull ( comparer ) ;
228175 Assert . AreEqual ( "NullableComparer`1" , comparer . Implementation . GetType ( ) . Name ) ;
229176 Assert . Greater ( comparer . Compare ( 10 , 1 ) , 0 ) ;
@@ -246,7 +193,7 @@ public void NullableComparerTest()
246193 [ Test ]
247194 public void EnumComparerTest ( )
248195 {
249- AdvancedComparer < Direction > comparer = AdvancedComparer < Direction > . System ;
196+ var comparer = AdvancedComparer < Direction > . System ;
250197 Assert . IsNotNull ( comparer ) ;
251198 Assert . AreEqual ( "EnumComparer`2" , comparer . Implementation . GetType ( ) . Name ) ;
252199 Assert . Greater ( comparer . Compare ( Direction . Positive , Direction . Negative ) , 0 ) ;
@@ -273,9 +220,9 @@ public void EnumComparerTest()
273220 [ Test ]
274221 public void CustomComparerTest ( )
275222 {
276- Wrapper < int > o1 = new Wrapper < int > ( 1 ) ;
277- Wrapper < int > o2 = new Wrapper < int > ( 2 ) ;
278- AdvancedComparer < Wrapper < int > > comparer = AdvancedComparer < Wrapper < int > > . Default ;
223+ var o1 = new Wrapper < int > ( 1 ) ;
224+ var o2 = new Wrapper < int > ( 2 ) ;
225+ var comparer = AdvancedComparer < Wrapper < int > > . Default ;
279226 Assert . IsNotNull ( comparer ) ;
280227 AssertEx . IsPatternMatch ( comparer . Implementation . GetType ( ) . Name , "WrapperComparer*" ) ;
281228 Assert . Greater ( comparer . Compare ( o2 , o1 ) , 0 ) ;
@@ -284,9 +231,9 @@ public void CustomComparerTest()
284231 [ Test ]
285232 public void CustomComparerTest2 ( )
286233 {
287- Wrapper2 < int , int > o1 = new Wrapper2 < int , int > ( 0 , 1 ) ;
288- Wrapper2 < int , int > o2 = new Wrapper2 < int , int > ( 0 , 2 ) ;
289- AdvancedComparer < Wrapper2 < int , int > > comparer = AdvancedComparer < Wrapper2 < int , int > > . Default ;
234+ var o1 = new Wrapper2 < int , int > ( 0 , 1 ) ;
235+ var o2 = new Wrapper2 < int , int > ( 0 , 2 ) ;
236+ var comparer = AdvancedComparer < Wrapper2 < int , int > > . Default ;
290237 Assert . IsNotNull ( comparer ) ;
291238 AssertEx . IsPatternMatch ( comparer . Implementation . GetType ( ) . Name , "Wrapper2Comparer*" ) ;
292239 Assert . Greater ( comparer . Compare ( o2 , o1 ) , 0 ) ;
@@ -295,9 +242,9 @@ public void CustomComparerTest2()
295242 [ Test ]
296243 public void InheritedComparerTest ( )
297244 {
298- Wrapper2a < int , int > o1 = new Wrapper2a < int , int > ( 0 , 1 ) ;
299- Wrapper2a < int , int > o2 = new Wrapper2a < int , int > ( 0 , 2 ) ;
300- AdvancedComparer < Wrapper2a < int , int > > comparer = AdvancedComparer < Wrapper2a < int , int > > . Default ;
245+ var o1 = new Wrapper2a < int , int > ( 0 , 1 ) ;
246+ var o2 = new Wrapper2a < int , int > ( 0 , 2 ) ;
247+ var comparer = AdvancedComparer < Wrapper2a < int , int > > . Default ;
301248 Assert . IsNotNull ( comparer ) ;
302249 AssertEx . IsPatternMatch ( comparer . Implementation . GetType ( ) . Name , "BaseComparerWrapper*" ) ;
303250 Assert . AreEqual ( comparer . Compare ( o2 , o1 ) , 0 ) ;
@@ -306,50 +253,12 @@ public void InheritedComparerTest()
306253 [ Test ]
307254 public void CastingComparerTest ( )
308255 {
309- Wrapper1 < int > o1 = new Wrapper1 < int > ( 1 ) ;
310- Wrapper1 < int > o2 = new Wrapper1 < int > ( 2 ) ;
311- AdvancedComparer < Wrapper < int > > comparer = AdvancedComparer < Wrapper1 < int > > . Default . Cast < Wrapper < int > > ( ) ;
256+ var o1 = new Wrapper1 < int > ( 1 ) ;
257+ var o2 = new Wrapper1 < int > ( 2 ) ;
258+ var comparer = AdvancedComparer < Wrapper1 < int > > . Default . Cast < Wrapper < int > > ( ) ;
312259 Assert . IsNotNull ( comparer ) ;
313260 AssertEx . IsPatternMatch ( comparer . Implementation . GetType ( ) . Name , "CastingComparer*" ) ;
314261 Assert . Greater ( comparer . Compare ( o2 , o1 ) , 0 ) ;
315262 }
316-
317- // [Test]
318- // public void TupleEntireComparerTest()
319- // {
320- // List<Type> fields = new List<Type>(3);
321- // fields.AddRange(new Type[] {typeof(int), typeof(bool), typeof(string)});
322- // TupleDescriptor tupleDescriptor = TupleDescriptor.Create(fields);
323- // Tuple tuple = Tuple.Create(tupleDescriptor);
324- // tuple.SetValue(0, 1);
325- // tuple.SetValue(1, true);
326- // tuple.SetValue(2, "TupleEntire");
327- // IEntire<Tuple> entire1 = Entire<Tuple>.Create(tuple);
328- // IEntire<Tuple> entire2 = Entire<Tuple>.Create(tuple);
329- // AdvancedComparer<IEntire<Tuple>> comparer = AdvancedComparer<IEntire<Tuple>>.Default;
330- // AssertEx.IsPatternMatch(comparer.Implementation.GetType().Name, "EntireInterfaceComparer*");
331- //
332- //// entire2.Shift(1);
333- //// Assert.IsFalse(c.Equals(entire1, entire2));
334- //// Assert.AreEqual(-1, c.Compare(entire1, entire2));
335- ////
336- //// entire1.Shift();
337- //// Assert.IsFalse(c.Equals(entire1, entire2));
338- //// Assert.AreEqual(1, c.Compare(entire1, entire2));
339- ////
340- //// entire2.Shift();
341- //// Assert.IsTrue(c.Equals(entire1, entire2));
342- //// Assert.AreEqual(0, c.Compare(entire1, entire2));
343- // }
344-
345- int ToReflect1 ( Direction d )
346- {
347- return ( int ) d ;
348- }
349-
350- Direction ToReflect2 ( int i )
351- {
352- return ( Direction ) i ;
353- }
354263 }
355264}
0 commit comments