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