From 6b1ea31e8401e3c9b1bb78a7a3f0bab1438fedb8 Mon Sep 17 00:00:00 2001
From: ilya-krivtsov <180809461+ilya-krivtsov@users.noreply.github.com>
Date: Fri, 23 May 2025 15:03:13 +0300
Subject: [PATCH] Null elements
---
.../NullElements.Tests/BasicListTests.cs | 57 ++++++++++++++++
.../NullElements.Tests/GlobalSuppressions.cs | 11 +++
.../NullElements.Tests.csproj | 27 ++++++++
.../NullElements.Tests/NullElementsTests.cs | 51 ++++++++++++++
NullElements/NullElements.sln | 28 ++++++++
NullElements/NullElements/BasicList.cs | 67 +++++++++++++++++++
NullElements/NullElements/INullComparer.cs | 19 ++++++
NullElements/NullElements/NullElements.cs | 21 ++++++
NullElements/NullElements/NullElements.csproj | 9 +++
9 files changed, 290 insertions(+)
create mode 100644 NullElements/NullElements.Tests/BasicListTests.cs
create mode 100644 NullElements/NullElements.Tests/GlobalSuppressions.cs
create mode 100644 NullElements/NullElements.Tests/NullElements.Tests.csproj
create mode 100644 NullElements/NullElements.Tests/NullElementsTests.cs
create mode 100644 NullElements/NullElements.sln
create mode 100644 NullElements/NullElements/BasicList.cs
create mode 100644 NullElements/NullElements/INullComparer.cs
create mode 100644 NullElements/NullElements/NullElements.cs
create mode 100644 NullElements/NullElements/NullElements.csproj
diff --git a/NullElements/NullElements.Tests/BasicListTests.cs b/NullElements/NullElements.Tests/BasicListTests.cs
new file mode 100644
index 0000000..3b8ea18
--- /dev/null
+++ b/NullElements/NullElements.Tests/BasicListTests.cs
@@ -0,0 +1,57 @@
+//
+// Copyright (c) Ilya Krivtsov. All rights reserved.
+//
+
+namespace NullElements.Tests;
+
+public class BasicListTests
+{
+ private BasicList list;
+
+ [SetUp]
+ public void Setup()
+ {
+ list = [];
+ }
+
+ [Test]
+ public void EmptyList_ShouldReturn_EmptyEnumerator()
+ {
+ Assert.That(list.SequenceEqual([]), Is.True);
+ }
+
+ [Test]
+ public void ListWithOneValue_ShouldReturn_EnumeratorWithOneElement()
+ {
+ int value = 42;
+ list.Add(value);
+ Assert.That(list.SequenceEqual([value]), Is.True);
+ }
+
+ [Test]
+ public void ListWithManyValues_ShouldReturn_EnumeratorWithSameValules()
+ {
+ var values = Enumerable.Range(0, 1000);
+ foreach (var value in values)
+ {
+ list.Add(value);
+ }
+
+ Assert.That(list.SequenceEqual(values), Is.True);
+ }
+
+ [Test]
+ public void ModifyingList_WhileIterating_ShouldThrow()
+ {
+ var values = Enumerable.Range(0, 1000);
+ foreach (var value in values)
+ {
+ list.Add(value);
+ }
+
+ var enumerator = list.GetEnumerator();
+ enumerator.MoveNext();
+ list.Add(1010101);
+ Assert.Throws(() => enumerator.MoveNext());
+ }
+}
diff --git a/NullElements/NullElements.Tests/GlobalSuppressions.cs b/NullElements/NullElements.Tests/GlobalSuppressions.cs
new file mode 100644
index 0000000..5292943
--- /dev/null
+++ b/NullElements/NullElements.Tests/GlobalSuppressions.cs
@@ -0,0 +1,11 @@
+//
+// Copyright (c) Ilya Krivtsov. All rights reserved.
+//
+
+// This file is used by Code Analysis to maintain SuppressMessage
+// attributes that are applied to this project.
+// Project-level suppressions either have no target or are given
+// a specific target and scoped to a namespace, type, member, etc.
+using System.Diagnostics.CodeAnalysis;
+
+[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented", Justification = "This is project with tests")]
diff --git a/NullElements/NullElements.Tests/NullElements.Tests.csproj b/NullElements/NullElements.Tests/NullElements.Tests.csproj
new file mode 100644
index 0000000..9b9a387
--- /dev/null
+++ b/NullElements/NullElements.Tests/NullElements.Tests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ net9.0
+ latest
+ enable
+ enable
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NullElements/NullElements.Tests/NullElementsTests.cs b/NullElements/NullElements.Tests/NullElementsTests.cs
new file mode 100644
index 0000000..556f052
--- /dev/null
+++ b/NullElements/NullElements.Tests/NullElementsTests.cs
@@ -0,0 +1,51 @@
+//
+// Copyright (c) Ilya Krivtsov. All rights reserved.
+//
+
+namespace NullElements.Tests;
+
+using System.Numerics;
+
+public class NullElementsTests
+{
+ [Test]
+ public void CountNullElements_IsCorrect_ForReferenceTypes()
+ {
+ BasicList