blob: 11b5af4eebbc4ac5a9d4f8a5a0b247592e85a5ba [file] [log] [blame]
Jens Geyeraffea7b2020-05-22 17:28:30 +02001// Licensed to the Apache Software Foundation(ASF) under one
2// or more contributor license agreements.See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18using System;
19using System.Collections.Generic;
20using System.Diagnostics;
21using System.Linq;
22using System.Text;
23using Microsoft.VisualStudio.TestTools.UnitTesting;
24using OptReqDefTest;
25using Thrift.Collections;
26
27namespace Thrift.Tests.DataModel
28{
29 // ReSharper disable once InconsistentNaming
30 [TestClass]
31 public class DeepCopyTests
32 {
33 [TestMethod]
34 public void Test_Complex_DeepCopy()
35 {
36 var first = InitializeInstance(new RaceDetails());
37 VerifyIdenticalContent(first, InitializeInstance(new RaceDetails()));
38
39 var second = first.DeepCopy();
40 VerifyIdenticalContent(first, second);
41 ModifyInstance(second,0);
42 VerifyDifferentContent(first, second);
43 VerifyIdenticalContent(first, InitializeInstance(new RaceDetails()));
44
45 var third = second.DeepCopy();
46 VerifyIdenticalContent(second, third);
47 ModifyInstance(third,0);
48 VerifyDifferentContent(second, third);
49 VerifyIdenticalContent(first, InitializeInstance(new RaceDetails()));
50 }
51
Jens Geyer3cac3202022-01-31 18:04:35 +010052 private RaceDetails? MakeNestedRaceDetails(int nesting)
Jens Geyeraffea7b2020-05-22 17:28:30 +020053 {
54 if (++nesting > 1)
55 return null;
56
57 var instance = new RaceDetails();
58 InitializeInstance(instance,nesting);
59 return instance;
60 }
61
Jens Geyer3cac3202022-01-31 18:04:35 +010062 private jack? MakeNestedUnion(int nesting)
Jens Geyeraffea7b2020-05-22 17:28:30 +020063 {
64 if (++nesting > 1)
65 return null;
66
67 var details = new RaceDetails();
68 InitializeInstance(details,nesting);
69 return new jack.nested_struct(details);
70 }
71
72
73 private RaceDetails InitializeInstance(RaceDetails instance, int nesting = 0)
74 {
75 // at init, we intentionally leave all non-required fields unset
76 Assert.IsFalse(instance.__isset.opt_one);
77 Assert.IsFalse(instance.__isset.opt_two);
78 Assert.IsFalse(instance.__isset.opt_three);
79 Assert.IsFalse(instance.__isset.opt_four);
80 Assert.IsFalse(instance.__isset.opt_five);
81 Assert.IsFalse(instance.__isset.opt_six);
82 Assert.IsFalse(instance.__isset.opt_seven);
83 Assert.IsFalse(instance.__isset.opt_eight);
Jens Geyer62445c12022-06-29 00:00:00 +020084 Assert.IsFalse(instance.__isset.opt_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +020085
86 // set all required to null/default
87 instance.Req_one = default;
88 instance.Req_two = default;
89 instance.Req_three = default;
Jens Geyer3cac3202022-01-31 18:04:35 +010090 Assert.IsNotNull(instance.Req_four);
Jens Geyer62445c12022-06-29 00:00:00 +020091 instance.Req_five = default;
92 instance.Req_six = default;
93 instance.Req_seven = default;
Jens Geyer3cac3202022-01-31 18:04:35 +010094 instance.Req_eight = default;
Jens Geyer62445c12022-06-29 00:00:00 +020095 Assert.IsNotNull(instance.Req_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +020096
97 // leave non-required fields unset again
98 Assert.IsFalse(instance.__isset.def_one);
99 Assert.IsFalse(instance.__isset.def_two);
100 Assert.IsFalse(instance.__isset.def_three);
101 Assert.IsFalse(instance.__isset.def_four);
102 Assert.IsFalse(instance.__isset.def_five);
103 Assert.IsFalse(instance.__isset.def_six);
104 Assert.IsFalse(instance.__isset.def_seven);
105 Assert.IsFalse(instance.__isset.def_eight);
Jens Geyer62445c12022-06-29 00:00:00 +0200106 Assert.IsFalse(instance.__isset.def_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200107
108 // these should have IDL defaults set
109
110 Assert.IsTrue(instance.__isset.opt_one_with_value);
111 Assert.IsTrue(instance.__isset.opt_two_with_value);
112 Assert.IsTrue(instance.__isset.opt_three_with_value);
113 Assert.IsTrue(instance.__isset.opt_four_with_value);
114 Assert.IsTrue(instance.__isset.opt_five_with_value);
115 Assert.IsTrue(instance.__isset.opt_six_with_value);
116 Assert.IsTrue(instance.__isset.opt_seven_with_value);
117 Assert.IsTrue(instance.__isset.opt_eight_with_value);
Jens Geyer62445c12022-06-29 00:00:00 +0200118 Assert.IsTrue(instance.__isset.opt_nine_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200119
120 Assert.AreEqual(instance.Req_one_with_value, (Distance)1);
121 Assert.AreEqual(instance.Req_two_with_value, 2.22);
122 Assert.AreEqual(instance.Req_three_with_value, 3);
123 Assert.AreEqual(instance.Req_four_with_value, "four");
Jens Geyer62445c12022-06-29 00:00:00 +0200124 Assert.AreEqual(new Guid("55555555-5555-5555-5555-000000000000"), instance.Req_five_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200125
Jens Geyer3cac3202022-01-31 18:04:35 +0100126 Assert.IsTrue(instance.Req_six_with_value!.Count == 1);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200127 Assert.AreEqual(instance.Req_six_with_value[0], 6 );
128
Jens Geyer3cac3202022-01-31 18:04:35 +0100129 Assert.IsTrue(instance.Req_seven_with_value!.Count == 1);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200130 Assert.IsTrue(instance.Req_seven_with_value.Contains(7));
131
Jens Geyer3cac3202022-01-31 18:04:35 +0100132 Assert.IsTrue(instance.Req_eight_with_value!.Count == 1);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200133 Assert.IsTrue(instance.Req_eight_with_value[8] == 8);
134
Jens Geyer62445c12022-06-29 00:00:00 +0200135 Assert.AreEqual("nine", Encoding.UTF8.GetString(instance.Req_nine_with_value!));
136
Jens Geyeraffea7b2020-05-22 17:28:30 +0200137 Assert.IsTrue(instance.__isset.def_one_with_value);
138 Assert.IsTrue(instance.__isset.def_two_with_value);
139 Assert.IsTrue(instance.__isset.def_three_with_value);
140 Assert.IsTrue(instance.__isset.def_four_with_value);
141 Assert.IsTrue(instance.__isset.def_five_with_value);
142 Assert.IsTrue(instance.__isset.def_six_with_value);
143 Assert.IsTrue(instance.__isset.def_seven_with_value);
144 Assert.IsTrue(instance.__isset.def_eight_with_value);
Jens Geyer62445c12022-06-29 00:00:00 +0200145 Assert.IsTrue(instance.__isset.def_nine_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200146
147 instance.Last_of_the_mohicans = true;
148
149 if (nesting < 2)
150 {
151 instance.Far_list = new List<Distance>() { Distance.foo, Distance.bar, Distance.baz };
Jens Geyer3cac3202022-01-31 18:04:35 +0100152 instance.Far_set = new HashSet<Distance>() { Distance.foo, Distance.bar, Distance.baz };
Jens Geyeraffea7b2020-05-22 17:28:30 +0200153 instance.Far_map = new Dictionary<Distance, Distance>() { [Distance.foo] = Distance.foo, [Distance.bar] = Distance.bar, [Distance.baz] = Distance.baz };
154
Jens Geyer3cac3202022-01-31 18:04:35 +0100155 instance.Far_set_list = new HashSet<List<Distance>>() { new List<Distance>() { Distance.foo } };
156 instance.Far_list_map_set = new List<Dictionary<sbyte, HashSet<Distance>>>() { new Dictionary<sbyte, HashSet<Distance>>() { [1] = new HashSet<Distance>() { Distance.baz } } };
157
158 instance.Far_map_dist_to_rds = new Dictionary<Distance, List<RaceDetails>>() { [Distance.bar] = new List<RaceDetails>() };
159 var details = MakeNestedRaceDetails(nesting);
160 if (details != null)
161 instance.Far_map_dist_to_rds[Distance.bar].Add(details);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200162
163 instance.Req_nested = MakeNestedRaceDetails(nesting);
164 Assert.IsFalse(instance.__isset.opt_nested);
165 Assert.IsFalse(instance.__isset.def_nested);
166
167 instance.Req_union = MakeNestedUnion(nesting);
168 Assert.IsFalse(instance.__isset.opt_union);
169 Assert.IsFalse(instance.__isset.def_union);
170 }
171
172 instance.Triplesix = (Distance)666;
173
174 return instance;
175 }
176
177 private void ModifyInstance(RaceDetails instance, int level)
178 {
179 if ((instance == null) || (++level > 4))
180 return;
181
182 instance.Opt_one = ModifyValue(instance.Opt_one);
183 instance.Opt_two = ModifyValue(instance.Opt_two);
184 instance.Opt_three = ModifyValue(instance.Opt_three);
185 instance.Opt_four = ModifyValue(instance.Opt_four);
186 instance.Opt_five = ModifyValue(instance.Opt_five);
187 instance.Opt_six = ModifyValue(instance.Opt_six);
188 instance.Opt_seven = ModifyValue(instance.Opt_seven);
189 instance.Opt_eight = ModifyValue(instance.Opt_eight);
Jens Geyer62445c12022-06-29 00:00:00 +0200190 instance.Opt_nine = ModifyValue(instance.Opt_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200191
192 instance.Req_one = ModifyValue(instance.Req_one);
193 instance.Req_two = ModifyValue(instance.Req_two);
194 instance.Req_three = ModifyValue(instance.Req_three);
195 instance.Req_four = ModifyValue(instance.Req_four);
196 instance.Req_five = ModifyValue(instance.Req_five);
197 instance.Req_six = ModifyValue(instance.Req_six);
198 instance.Req_seven = ModifyValue(instance.Req_seven);
199 instance.Req_eight = ModifyValue(instance.Req_eight);
Jens Geyer62445c12022-06-29 00:00:00 +0200200 instance.Req_nine = ModifyValue(instance.Req_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200201
202 instance.Def_one = ModifyValue(instance.Def_one);
203 instance.Def_two = ModifyValue(instance.Def_two);
204 instance.Def_three = ModifyValue(instance.Def_three);
205 instance.Def_four = ModifyValue(instance.Def_four);
206 instance.Def_five = ModifyValue(instance.Def_five);
207 instance.Def_six = ModifyValue(instance.Def_six);
208 instance.Def_seven = ModifyValue(instance.Def_seven);
209 instance.Def_eight = ModifyValue(instance.Def_eight);
Jens Geyer62445c12022-06-29 00:00:00 +0200210 instance.Def_nine = ModifyValue(instance.Def_nine);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200211
212 instance.Opt_one_with_value = ModifyValue(instance.Opt_one_with_value);
213 instance.Opt_two_with_value = ModifyValue(instance.Opt_two_with_value);
214 instance.Opt_three_with_value = ModifyValue(instance.Opt_three_with_value);
215 instance.Opt_four_with_value = ModifyValue(instance.Opt_four_with_value);
216 instance.Opt_five_with_value = ModifyValue(instance.Opt_five_with_value);
217 instance.Opt_six_with_value = ModifyValue(instance.Opt_six_with_value);
218 instance.Opt_seven_with_value = ModifyValue(instance.Opt_seven_with_value);
219 instance.Opt_eight_with_value = ModifyValue(instance.Opt_eight_with_value);
Jens Geyer62445c12022-06-29 00:00:00 +0200220 instance.Opt_nine_with_value = ModifyValue(instance.Opt_nine_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200221
222 instance.Req_one_with_value = ModifyValue(instance.Req_one_with_value);
223 instance.Req_two_with_value = ModifyValue(instance.Req_two_with_value);
224 instance.Req_three_with_value = ModifyValue(instance.Req_three_with_value);
225 instance.Req_four_with_value = ModifyValue(instance.Req_four_with_value);
226 instance.Req_five_with_value = ModifyValue(instance.Req_five_with_value);
227 instance.Req_six_with_value = ModifyValue(instance.Req_six_with_value);
228 instance.Req_seven_with_value = ModifyValue(instance.Req_seven_with_value);
229 instance.Req_eight_with_value = ModifyValue(instance.Req_eight_with_value);
Jens Geyer62445c12022-06-29 00:00:00 +0200230 instance.Req_nine_with_value = ModifyValue(instance.Req_nine_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200231
232 instance.Def_one_with_value = ModifyValue(instance.Def_one_with_value);
233 instance.Def_two_with_value = ModifyValue(instance.Def_two_with_value);
234 instance.Def_three_with_value = ModifyValue(instance.Def_three_with_value);
235 instance.Def_four_with_value = ModifyValue(instance.Def_four_with_value);
236 instance.Def_five_with_value = ModifyValue(instance.Def_five_with_value);
237 instance.Def_six_with_value = ModifyValue(instance.Def_six_with_value);
238 instance.Def_seven_with_value = ModifyValue(instance.Def_seven_with_value);
239 instance.Def_eight_with_value = ModifyValue(instance.Def_eight_with_value);
Jens Geyer62445c12022-06-29 00:00:00 +0200240 instance.Def_nine_with_value = ModifyValue(instance.Def_nine_with_value);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200241
242 instance.Last_of_the_mohicans = ModifyValue(instance.Last_of_the_mohicans);
243
244 instance.Far_list = ModifyValue(instance.Far_list);
245 instance.Far_set = ModifyValue(instance.Far_set);
246 instance.Far_map = ModifyValue(instance.Far_map);
247
248 instance.Far_set_list = ModifyValue(instance.Far_set_list);
249 instance.Far_list_map_set = ModifyValue(instance.Far_list_map_set);
250 instance.Far_map_dist_to_rds = ModifyValue(instance.Far_map_dist_to_rds, level);
251
252 instance.Req_nested = ModifyValue(instance.Req_nested, level);
253 instance.Opt_nested = ModifyValue(instance.Opt_nested, level);
254 instance.Def_nested = ModifyValue(instance.Def_nested, level);
255
256 instance.Req_union = ModifyValue(instance.Req_union, level);
257 instance.Opt_union = ModifyValue(instance.Opt_union, level);
258 instance.Def_union = ModifyValue(instance.Def_union, level);
259
260 instance.Triplesix = ModifyValue(instance.Triplesix);
261 }
262
Jens Geyer3cac3202022-01-31 18:04:35 +0100263 private jack? ModifyValue(jack? value, int level)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200264 {
265 if (++level > 4)
266 return value;
267
268 if (value == null)
269 value = MakeNestedUnion(0);
Jens Geyer3cac3202022-01-31 18:04:35 +0100270 Debug.Assert(value?.As_nested_struct != null);
Jens Geyeraffea7b2020-05-22 17:28:30 +0200271 ModifyInstance(value.As_nested_struct, level);
272 return value;
273 }
274
Jens Geyer3cac3202022-01-31 18:04:35 +0100275 private RaceDetails? ModifyValue(RaceDetails? value, int level)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200276 {
277 if (++level > 4)
278 return value;
279
280 if (value == null)
281 value = new RaceDetails();
282 ModifyInstance(value,level);
283 return value;
284 }
285
Jens Geyer3cac3202022-01-31 18:04:35 +0100286 private Dictionary<Distance, List<RaceDetails>> ModifyValue(Dictionary<Distance, List<RaceDetails>>? value, int level)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200287 {
288 if (value == null)
289 value = new Dictionary<Distance, List<RaceDetails>>();
290
291 if (++level > 4)
292 return value;
293
294 var details = new RaceDetails();
295 InitializeInstance(details);
296 value[Distance.foo] = new List<RaceDetails>() { details };
297
298 if (value.TryGetValue(Distance.bar, out var list) && (list.Count > 0))
299 {
300 ModifyInstance(list[0], level);
Jens Geyer3cac3202022-01-31 18:04:35 +0100301 //list.Add(null); -- Thrift does not allow null values in containers
Jens Geyeraffea7b2020-05-22 17:28:30 +0200302 }
303
Jens Geyer3cac3202022-01-31 18:04:35 +0100304 // Thrift does not allow null values in containers
305 //value[Distance.baz] = null;
Jens Geyeraffea7b2020-05-22 17:28:30 +0200306
307 return value;
308 }
309
Jens Geyer3cac3202022-01-31 18:04:35 +0100310 private static List<Dictionary<sbyte, HashSet<Distance>>> ModifyValue(List<Dictionary<sbyte, HashSet<Distance>>>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200311 {
312 if (value == null)
Jens Geyer3cac3202022-01-31 18:04:35 +0100313 value = new List<Dictionary<sbyte, HashSet<Distance>>>();
Jens Geyeraffea7b2020-05-22 17:28:30 +0200314
315 if (value.Count == 0)
Jens Geyer3cac3202022-01-31 18:04:35 +0100316 value.Add(new Dictionary<sbyte, HashSet<Distance>>());
317 //else
318 //value.Add(null); --Thrift does not allow null values in containers
Jens Geyeraffea7b2020-05-22 17:28:30 +0200319
320 sbyte key = (sbyte)(value[0].Count + 10);
321 if (value[0].Count == 0)
Jens Geyer3cac3202022-01-31 18:04:35 +0100322 value[0].Add(key, new HashSet<Distance>());
323 //else
324 //value[0].Add(key, null); --Thrift does not allow null values in containers
Jens Geyeraffea7b2020-05-22 17:28:30 +0200325
326 foreach (var entry in value)
327 {
328 if (entry != null)
329 {
330 foreach (var pair in entry)
331 {
332 if (pair.Value != null)
333 {
334 if (pair.Value.Contains(Distance.baz))
335 pair.Value.Remove(Distance.baz);
336 else
337 pair.Value.Add(Distance.baz);
338 }
339 }
340 }
341 }
342
343 return value;
344 }
345
Jens Geyer3cac3202022-01-31 18:04:35 +0100346 private static HashSet<List<Distance>> ModifyValue(HashSet<List<Distance>>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200347 {
348 if (value == null)
Jens Geyer3cac3202022-01-31 18:04:35 +0100349 value = new HashSet<List<Distance>>();
Jens Geyeraffea7b2020-05-22 17:28:30 +0200350
351 if (value.Count == 0)
352 value.Add(new List<Distance>());
Jens Geyer3cac3202022-01-31 18:04:35 +0100353 //else
354 //value.Add(null); -- Thrift does not allow null values in containers
Jens Geyeraffea7b2020-05-22 17:28:30 +0200355
356 foreach (var entry in value)
357 if( entry != null)
358 entry.Add(Distance.baz);
359
360 return value;
361 }
362
Jens Geyer3cac3202022-01-31 18:04:35 +0100363 private static Dictionary<Distance, Distance> ModifyValue(Dictionary<Distance, Distance>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200364 {
365 if (value == null)
366 value = new Dictionary<Distance, Distance>();
367 value[Distance.foo] = value.ContainsKey(Distance.foo) ? ++value[Distance.foo] : Distance.foo;
368 value[Distance.bar] = value.ContainsKey(Distance.bar) ? ++value[Distance.bar] : Distance.bar;
369 value[Distance.baz] = value.ContainsKey(Distance.baz) ? ++value[Distance.baz] : Distance.baz;
370 return value;
371 }
372
Jens Geyer3cac3202022-01-31 18:04:35 +0100373 private static HashSet<Distance> ModifyValue(HashSet<Distance>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200374 {
375 if (value == null)
Jens Geyer3cac3202022-01-31 18:04:35 +0100376 value = new HashSet<Distance>();
Jens Geyeraffea7b2020-05-22 17:28:30 +0200377
378 if (value.Contains(Distance.foo))
379 value.Remove(Distance.foo);
380 else
381 value.Add(Distance.foo);
382
383 if (value.Contains(Distance.bar))
384 value.Remove(Distance.bar);
385 else
386 value.Add(Distance.bar);
387
388 if (value.Contains(Distance.baz))
389 value.Remove(Distance.baz);
390 else
391 value.Add(Distance.baz);
392
393 return value;
394 }
395
Jens Geyer3cac3202022-01-31 18:04:35 +0100396 private static List<Distance> ModifyValue(List<Distance>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200397 {
398 if (value == null)
399 value = new List<Distance>();
400 value.Add(Distance.foo);
401 value.Add(Distance.bar);
402 value.Add(Distance.baz);
403 return value;
404 }
405
Jens Geyer98a23252022-01-09 16:50:52 +0100406 private static bool ModifyValue(bool value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200407 {
408 return !value;
409 }
410
Jens Geyer3cac3202022-01-31 18:04:35 +0100411 private static Dictionary<sbyte, short> ModifyValue(Dictionary<sbyte, short>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200412 {
413 if (value == null)
414 value = new Dictionary<sbyte, short>();
415 value.Add((sbyte)(value.Count + 10), (short)value.Count);
416 return value;
417 }
418
Jens Geyer3cac3202022-01-31 18:04:35 +0100419 private static HashSet<long> ModifyValue(HashSet<long>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200420 {
421 if (value == null)
Jens Geyer3cac3202022-01-31 18:04:35 +0100422 value = new HashSet<long>();
Jens Geyeraffea7b2020-05-22 17:28:30 +0200423 value.Add(value.Count+100);
424 return value;
425 }
426
Jens Geyer3cac3202022-01-31 18:04:35 +0100427 private static List<int> ModifyValue(List<int>? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200428 {
429 if (value == null)
430 value = new List<int>();
431 value.Add(value.Count);
432 return value;
433 }
434
Jens Geyer3cac3202022-01-31 18:04:35 +0100435 private static byte[] ModifyValue(byte[]? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200436 {
437 if (value == null)
438 value = new byte[1] { 0 };
439 if (value.Length > 0)
440 value[0] = (value[0] < 0xFF) ? ++value[0] : (byte)0;
Jens Geyer3cac3202022-01-31 18:04:35 +0100441 else
442 value = new byte[1] { 0 };
Jens Geyeraffea7b2020-05-22 17:28:30 +0200443 return value;
444 }
445
Jens Geyer3cac3202022-01-31 18:04:35 +0100446 private static string ModifyValue(string? value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200447 {
448 return value + "1";
449 }
450
Jens Geyer62445c12022-06-29 00:00:00 +0200451 private static Guid ModifyValue(Guid value)
452 {
453 return new Guid( ModifyValue(value.ToByteArray()));
454 }
455
Jens Geyer98a23252022-01-09 16:50:52 +0100456 private static double ModifyValue(double value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200457 {
458 return value + 1.1;
459 }
460
Jens Geyer98a23252022-01-09 16:50:52 +0100461 private static short ModifyValue(short value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200462 {
463 return ++value;
464 }
465
Jens Geyer98a23252022-01-09 16:50:52 +0100466 private static Distance ModifyValue(Distance value)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200467 {
468 return ++value;
469 }
470
Jens Geyer98a23252022-01-09 16:50:52 +0100471 private static void VerifyDifferentContent(RaceDetails first, RaceDetails second)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200472 {
473 Assert.AreNotEqual(first, second);
474
475 Assert.AreNotEqual(first.Opt_two, second.Opt_two);
476 Assert.AreNotEqual(first.Opt_three, second.Opt_three);
477 Assert.AreNotEqual(first.Opt_four, second.Opt_four);
478 Assert.IsFalse(TCollections.Equals(first.Opt_five, second.Opt_five));
479 Assert.IsFalse(TCollections.Equals(first.Opt_six, second.Opt_six));
480 Assert.IsFalse(TCollections.Equals(first.Opt_seven, second.Opt_seven));
481 Assert.IsFalse(TCollections.Equals(first.Opt_eight, second.Opt_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200482 Assert.IsFalse(TCollections.Equals(first.Opt_nine, second.Opt_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200483
484 Assert.AreNotEqual(first.Req_one, second.Req_one);
485 Assert.AreNotEqual(first.Req_two, second.Req_two);
486 Assert.AreNotEqual(first.Req_three, second.Req_three);
487 Assert.AreNotEqual(first.Req_four, second.Req_four);
488 Assert.IsFalse(TCollections.Equals(first.Req_five, second.Req_five));
489 Assert.IsFalse(TCollections.Equals(first.Req_six, second.Req_six));
490 Assert.IsFalse(TCollections.Equals(first.Req_seven, second.Req_seven));
491 Assert.IsFalse(TCollections.Equals(first.Req_eight, second.Req_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200492 Assert.IsFalse(TCollections.Equals(first.Req_nine, second.Req_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200493
494 Assert.AreNotEqual(first.Def_one, second.Def_one);
495 Assert.AreNotEqual(first.Def_two, second.Def_two);
496 Assert.AreNotEqual(first.Def_three, second.Def_three);
497 Assert.AreNotEqual(first.Def_four, second.Def_four);
498 Assert.IsFalse(TCollections.Equals(first.Def_five, second.Def_five));
499 Assert.IsFalse(TCollections.Equals(first.Def_six, second.Def_six));
500 Assert.IsFalse(TCollections.Equals(first.Def_seven, second.Def_seven));
501 Assert.IsFalse(TCollections.Equals(first.Def_eight, second.Def_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200502 Assert.IsFalse(TCollections.Equals(first.Def_nine, second.Def_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200503
504 Assert.AreNotEqual(first.Opt_one_with_value, second.Opt_one_with_value);
505 Assert.AreNotEqual(first.Opt_two_with_value, second.Opt_two_with_value);
506 Assert.AreNotEqual(first.Opt_three_with_value, second.Opt_three_with_value);
507 Assert.AreNotEqual(first.Opt_four_with_value, second.Opt_four_with_value);
508 Assert.IsFalse(TCollections.Equals(first.Opt_five_with_value, second.Opt_five_with_value));
509 Assert.IsFalse(TCollections.Equals(first.Opt_six_with_value, second.Opt_six_with_value));
510 Assert.IsFalse(TCollections.Equals(first.Opt_seven_with_value, second.Opt_seven_with_value));
511 Assert.IsFalse(TCollections.Equals(first.Opt_eight_with_value, second.Opt_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200512 Assert.IsFalse(TCollections.Equals(first.Opt_nine_with_value, second.Opt_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200513
514 Assert.AreNotEqual(first.Req_one_with_value, second.Req_one_with_value);
515 Assert.AreNotEqual(first.Req_two_with_value, second.Req_two_with_value);
516 Assert.AreNotEqual(first.Req_three_with_value, second.Req_three_with_value);
517 Assert.AreNotEqual(first.Req_four_with_value, second.Req_four_with_value);
518 Assert.IsFalse(TCollections.Equals(first.Req_five_with_value, second.Req_five_with_value));
519 Assert.IsFalse(TCollections.Equals(first.Req_six_with_value, second.Req_six_with_value));
520 Assert.IsFalse(TCollections.Equals(first.Req_seven_with_value, second.Req_seven_with_value));
521 Assert.IsFalse(TCollections.Equals(first.Req_eight_with_value, second.Req_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200522 Assert.IsFalse(TCollections.Equals(first.Req_nine_with_value, second.Req_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200523
524 Assert.AreNotEqual(first.Def_one_with_value, second.Def_one_with_value);
525 Assert.AreNotEqual(first.Def_two_with_value, second.Def_two_with_value);
526 Assert.AreNotEqual(first.Def_three_with_value, second.Def_three_with_value);
527 Assert.AreNotEqual(first.Def_four_with_value, second.Def_four_with_value);
528 Assert.IsFalse(TCollections.Equals(first.Def_five_with_value, second.Def_five_with_value));
529 Assert.IsFalse(TCollections.Equals(first.Def_six_with_value, second.Def_six_with_value));
530 Assert.IsFalse(TCollections.Equals(first.Def_seven_with_value, second.Def_seven_with_value));
531 Assert.IsFalse(TCollections.Equals(first.Def_eight_with_value, second.Def_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200532 Assert.IsFalse(TCollections.Equals(first.Def_nine_with_value, second.Def_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200533
534 Assert.AreNotEqual(first.Last_of_the_mohicans, second.Last_of_the_mohicans);
535
536 Assert.IsFalse(TCollections.Equals(first.Far_list, second.Far_list));
537 Assert.IsFalse(TCollections.Equals(first.Far_set, second.Far_set));
538 Assert.IsFalse(TCollections.Equals(first.Far_map, second.Far_map));
539
540 Assert.IsFalse(TCollections.Equals(first.Far_set_list, second.Far_set_list));
541 Assert.IsFalse(TCollections.Equals(first.Far_list_map_set, second.Far_list_map_set));
542 Assert.IsFalse(TCollections.Equals(first.Far_map_dist_to_rds, second.Far_map_dist_to_rds));
543
544 Assert.AreNotEqual(first.Req_nested, second.Req_nested);
545 Assert.AreNotEqual(first.Opt_nested, second.Opt_nested);
546 Assert.AreNotEqual(first.Def_nested, second.Def_nested);
547
548 Assert.AreNotEqual(first.Req_union, second.Req_union);
549 Assert.AreNotEqual(first.Opt_union, second.Opt_union);
550 Assert.AreNotEqual(first.Def_union, second.Def_union);
551
552 Assert.AreNotEqual(first.Triplesix, second.Triplesix);
553 }
554
Jens Geyer98a23252022-01-09 16:50:52 +0100555 private static void VerifyIdenticalContent(RaceDetails first, RaceDetails second)
Jens Geyeraffea7b2020-05-22 17:28:30 +0200556 {
557 Assert.AreEqual(first, second);
558
559 Assert.AreEqual(first.Opt_two, second.Opt_two);
560 Assert.AreEqual(first.Opt_three, second.Opt_three);
561 Assert.AreEqual(first.Opt_four, second.Opt_four);
562 Assert.IsTrue(TCollections.Equals(first.Opt_five, second.Opt_five));
563 Assert.IsTrue(TCollections.Equals(first.Opt_six, second.Opt_six));
564 Assert.IsTrue(TCollections.Equals(first.Opt_seven, second.Opt_seven));
565 Assert.IsTrue(TCollections.Equals(first.Opt_eight, second.Opt_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200566 Assert.IsTrue(TCollections.Equals(first.Opt_nine, second.Opt_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200567
568 Assert.AreEqual(first.Req_one, second.Req_one);
569 Assert.AreEqual(first.Req_two, second.Req_two);
570 Assert.AreEqual(first.Req_three, second.Req_three);
571 Assert.AreEqual(first.Req_four, second.Req_four);
572 Assert.IsTrue(TCollections.Equals(first.Req_five, second.Req_five));
573 Assert.IsTrue(TCollections.Equals(first.Req_six, second.Req_six));
574 Assert.IsTrue(TCollections.Equals(first.Req_seven, second.Req_seven));
575 Assert.IsTrue(TCollections.Equals(first.Req_eight, second.Req_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200576 Assert.IsTrue(TCollections.Equals(first.Req_nine, second.Req_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200577
578 Assert.AreEqual(first.Def_one, second.Def_one);
579 Assert.AreEqual(first.Def_two, second.Def_two);
580 Assert.AreEqual(first.Def_three, second.Def_three);
581 Assert.AreEqual(first.Def_four, second.Def_four);
582 Assert.IsTrue(TCollections.Equals(first.Def_five, second.Def_five));
583 Assert.IsTrue(TCollections.Equals(first.Def_six, second.Def_six));
584 Assert.IsTrue(TCollections.Equals(first.Def_seven, second.Def_seven));
585 Assert.IsTrue(TCollections.Equals(first.Def_eight, second.Def_eight));
Jens Geyer62445c12022-06-29 00:00:00 +0200586 Assert.IsTrue(TCollections.Equals(first.Def_nine, second.Def_nine));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200587
588 Assert.AreEqual(first.Opt_one_with_value, second.Opt_one_with_value);
589 Assert.AreEqual(first.Opt_two_with_value, second.Opt_two_with_value);
590 Assert.AreEqual(first.Opt_three_with_value, second.Opt_three_with_value);
591 Assert.AreEqual(first.Opt_four_with_value, second.Opt_four_with_value);
592 Assert.IsTrue(TCollections.Equals(first.Opt_five_with_value, second.Opt_five_with_value));
593 Assert.IsTrue(TCollections.Equals(first.Opt_six_with_value, second.Opt_six_with_value));
594 Assert.IsTrue(TCollections.Equals(first.Opt_seven_with_value, second.Opt_seven_with_value));
595 Assert.IsTrue(TCollections.Equals(first.Opt_eight_with_value, second.Opt_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200596 Assert.IsTrue(TCollections.Equals(first.Opt_nine_with_value, second.Opt_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200597
598 Assert.AreEqual(first.Req_one_with_value, second.Req_one_with_value);
599 Assert.AreEqual(first.Req_two_with_value, second.Req_two_with_value);
600 Assert.AreEqual(first.Req_three_with_value, second.Req_three_with_value);
601 Assert.AreEqual(first.Req_four_with_value, second.Req_four_with_value);
602 Assert.IsTrue(TCollections.Equals(first.Req_five_with_value, second.Req_five_with_value));
603 Assert.IsTrue(TCollections.Equals(first.Req_six_with_value, second.Req_six_with_value));
604 Assert.IsTrue(TCollections.Equals(first.Req_seven_with_value, second.Req_seven_with_value));
605 Assert.IsTrue(TCollections.Equals(first.Req_eight_with_value, second.Req_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200606 Assert.IsTrue(TCollections.Equals(first.Req_nine_with_value, second.Req_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200607
608 Assert.AreEqual(first.Def_one_with_value, second.Def_one_with_value);
609 Assert.AreEqual(first.Def_two_with_value, second.Def_two_with_value);
610 Assert.AreEqual(first.Def_three_with_value, second.Def_three_with_value);
611 Assert.AreEqual(first.Def_four_with_value, second.Def_four_with_value);
612 Assert.IsTrue(TCollections.Equals(first.Def_five_with_value, second.Def_five_with_value));
613 Assert.IsTrue(TCollections.Equals(first.Def_six_with_value, second.Def_six_with_value));
614 Assert.IsTrue(TCollections.Equals(first.Def_seven_with_value, second.Def_seven_with_value));
615 Assert.IsTrue(TCollections.Equals(first.Def_eight_with_value, second.Def_eight_with_value));
Jens Geyer62445c12022-06-29 00:00:00 +0200616 Assert.IsTrue(TCollections.Equals(first.Def_nine_with_value, second.Def_nine_with_value));
Jens Geyeraffea7b2020-05-22 17:28:30 +0200617
618 Assert.AreEqual(first.Last_of_the_mohicans, second.Last_of_the_mohicans);
619
620 Assert.IsTrue(TCollections.Equals(first.Far_list, second.Far_list));
621 Assert.IsTrue(TCollections.Equals(first.Far_set, second.Far_set));
622 Assert.IsTrue(TCollections.Equals(first.Far_map, second.Far_map));
623
624 Assert.IsTrue(TCollections.Equals(first.Far_set_list, second.Far_set_list));
625 Assert.IsTrue(TCollections.Equals(first.Far_list_map_set, second.Far_list_map_set));
626 Assert.IsTrue(TCollections.Equals(first.Far_map_dist_to_rds, second.Far_map_dist_to_rds));
627
628 Assert.AreEqual(first.Req_nested, second.Req_nested);
629 Assert.AreEqual(first.Opt_nested, second.Opt_nested);
630 Assert.AreEqual(first.Def_nested, second.Def_nested);
631
632 Assert.AreEqual(first.Req_union, second.Req_union);
633 Assert.AreEqual(first.Opt_union, second.Opt_union);
634 Assert.AreEqual(first.Def_union, second.Def_union);
635
636 Assert.AreEqual(first.Triplesix, second.Triplesix);
637 }
638
639 }
640}