|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
| 3 | +using System.IO; |
| 4 | +using System.Linq; |
3 | 5 | using System.Text; |
4 | 6 |
|
5 | 7 | using NUnit.Framework; |
@@ -358,5 +360,51 @@ public void MultiDimensional_Array_Should_Be_Cloned() |
358 | 360 | Array.CreateInstance(typeof(int), new[] { 0, 0, 1 }).DeepClone(); |
359 | 361 | Array.CreateInstance(typeof(int), new[] { 1, 1, 1 }).DeepClone(); |
360 | 362 | } |
| 363 | + |
| 364 | + [Test] |
| 365 | + public void Issue_17_Spec() |
| 366 | + { |
| 367 | + var set = new HashSet<string> { "value" }; |
| 368 | + Assert.That(set.Contains("value"), Is.True); |
| 369 | + |
| 370 | + var cloned = set.DeepClone(); |
| 371 | + Assert.That(cloned.Contains("value"), Is.True); |
| 372 | + |
| 373 | + var copyOfSet = new HashSet<string>(set, set.Comparer); |
| 374 | + Assert.That(copyOfSet.Contains("value"), Is.True); |
| 375 | + |
| 376 | + var copyOfCloned = new HashSet<string>(cloned, cloned.Comparer); |
| 377 | + Assert.That(copyOfCloned.ToArray()[0] == "value", Is.True); |
| 378 | + |
| 379 | + Assert.That(copyOfCloned.Contains("value"), Is.True); |
| 380 | + } |
| 381 | + |
| 382 | + [Test] |
| 383 | + public void Check_Comparer_does_not_Clone() |
| 384 | + { |
| 385 | + Check_Comparer_does_not_Clone_Internal<string>(); |
| 386 | + Check_Comparer_does_not_Clone_Internal<int>(); |
| 387 | + Check_Comparer_does_not_Clone_Internal<object>(); |
| 388 | + Check_Comparer_does_not_Clone_Internal<FileShare>(); |
| 389 | + Check_Comparer_does_not_Clone_Internal<byte[]>(); |
| 390 | + Check_Comparer_does_not_Clone_Internal<byte>(); |
| 391 | + Check_Comparer_does_not_Clone_Internal<int?>(); |
| 392 | + Check_Comparer_does_not_Clone_Internal<HashSet<int>>(); |
| 393 | + Assert.That(StringComparer.Ordinal == StringComparer.Ordinal.DeepClone(), Is.True); |
| 394 | + Assert.That(StringComparer.OrdinalIgnoreCase == StringComparer.OrdinalIgnoreCase.DeepClone(), Is.True); |
| 395 | + Assert.That(StringComparer.InvariantCulture == StringComparer.InvariantCulture.DeepClone(), Is.True); |
| 396 | + Assert.That(StringComparer.InvariantCultureIgnoreCase == StringComparer.InvariantCultureIgnoreCase.DeepClone(), Is.True); |
| 397 | + Assert.That(StringComparer.CurrentCulture == StringComparer.CurrentCulture.DeepClone(), Is.True); |
| 398 | + Assert.That(StringComparer.CurrentCultureIgnoreCase == StringComparer.CurrentCultureIgnoreCase.DeepClone(), Is.True); |
| 399 | + } |
| 400 | + |
| 401 | + private void Check_Comparer_does_not_Clone_Internal<T>() |
| 402 | + { |
| 403 | + var comparer = EqualityComparer<T>.Default; |
| 404 | + var cloned = comparer.DeepClone(); |
| 405 | + |
| 406 | + // checking by reference |
| 407 | + Assert.That(comparer == cloned, Is.True); |
| 408 | + } |
361 | 409 | } |
362 | 410 | } |
0 commit comments