diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9cc583..4472302 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@ All notable changes to Monify will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+# [1.1.3] - TBC
+
+## Fixed
+- Equality checks involing an encapsulated array containing identical values now yield true (#19).
+- `ToString` no longer throws a `FormatException`.
+
# [1.1.2] - 2025-10-20
## Fixed
diff --git a/build/Tests.props b/build/Tests.props
index 4d46a3e..4a96ee8 100644
--- a/build/Tests.props
+++ b/build/Tests.props
@@ -7,7 +7,7 @@
GeneratedCodeAttribute
Obsolete
**/*.Designer.cs
- CA1859;CA1861
+ CA1859;CA1861;IDE0039
$(MSBuildProjectName.Replace('.Tests', ''))
net9.0
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..4013db0
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ OutterForArray.Inner instance = new(_sampleValue);
+
+ // Act
+ int[] actual = instance;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..68f1b94
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _differentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..38010b4
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner? left = default;
+ OutterForArray.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner? left = default;
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..179e8e7
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_sampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_differentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..265b9d3
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentOutterForArrayInnerThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+ object other = new OutterForArray.Inner(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..02aa82b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..b99f254
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private static readonly int[] _firstValue = [7, 8, 9];
+ private static readonly int[] _secondValue = [10, 11, 12];
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ OutterForArray.Inner first = new(_firstValue);
+ OutterForArray.Inner second = new(_firstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ OutterForArray.Inner first = new(_firstValue);
+ OutterForArray.Inner second = new(_secondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
new file mode 100644
index 0000000..7ebcda0
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenImplicitOperatorFromIntArrayIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ OutterForArray.Inner result = _sampleValue;
+
+ // Act
+ int[] actual = result;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs
new file mode 100644
index 0000000..139a577
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenImplicitOperatorToIntArrayIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ OutterForArray.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (int[])subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ int[] actual = subject;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..35bc3d4
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject != _differentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..7c784ff
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenInequalityOperatorWithOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..da96198
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = "Inner { System.Int32[] }";
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..9994343
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ OutterForInt.Inner instance = new(SampleValue);
+
+ // Act
+ int actual = instance;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..94df7f3
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner? subject = default;
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == DifferentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..ff575ca
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenEqualityOperatorWithOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner? left = default;
+ OutterForInt.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner? left = default;
+ OutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs
new file mode 100644
index 0000000..6c28f44
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(SampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(DifferentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..fc04672
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentOutterForIntInnerThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+ object other = new OutterForInt.Inner(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..eeefec9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenEqualsWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..f9ea02a
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private const int FirstValue = 5;
+ private const int SecondValue = 9;
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ OutterForInt.Inner first = new(FirstValue);
+ OutterForInt.Inner second = new(FirstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ OutterForInt.Inner first = new(FirstValue);
+ OutterForInt.Inner second = new(SecondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs
new file mode 100644
index 0000000..f000a07
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenImplicitOperatorFromIntIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ OutterForInt.Inner result = SampleValue;
+
+ // Act
+ int actual = result;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs
new file mode 100644
index 0000000..af030ea
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenImplicitOperatorToIntIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ OutterForInt.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (int)subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ int actual = subject;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..8a5e808
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner? subject = default;
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != DifferentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..dc516fb
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenInequalityOperatorWithOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ OutterForInt.Inner left = new(SampleValue);
+ OutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..4ca6fb8
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = "Inner { 42 }";
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueThenTheExpectedStringIsReturned()
+ {
+ // Arrange
+ OutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..75c0690
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ OutterForString.Inner instance = new(SampleValue);
+
+ // Act
+ string actual = instance;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..711ec60
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenEqualityOperatorWithOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner? left = default;
+ OutterForString.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner? left = default;
+ OutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..5eb9f80
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenEqualityOperatorWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner? subject = default;
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == DifferentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..95fba45
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentOutterForStringInnerThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+ object other = new OutterForString.Inner(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..4153265
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs
new file mode 100644
index 0000000..815590d
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(SampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(DifferentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..351f276
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private const string FirstValue = "Alpha";
+ private const string SecondValue = "Beta";
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ OutterForString.Inner first = new(FirstValue);
+ OutterForString.Inner second = new(FirstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ OutterForString.Inner first = new(FirstValue);
+ OutterForString.Inner second = new(SecondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs
new file mode 100644
index 0000000..8dd9aa7
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenImplicitOperatorFromStringIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ OutterForString.Inner result = SampleValue;
+
+ // Act
+ string actual = result;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs
new file mode 100644
index 0000000..ddfa059
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenImplicitOperatorToStringIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ OutterForString.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (string)subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ string actual = subject;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..f795216
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenInequalityOperatorWithOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner left = new(SampleValue);
+ OutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..a4bb004
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenInequalityOperatorWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner? subject = default;
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != DifferentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..3db4579
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = $"Inner {{ {SampleValue} }}";
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ OutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..db29dcf
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ IOutterForArray.Inner instance = new(_sampleValue);
+
+ // Act
+ int[] actual = instance;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..5586f91
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner? left = default;
+ IOutterForArray.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner? left = default;
+ IOutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..dc3b71b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _differentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..7352bda
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithIOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..bd0efc2
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_sampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_differentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..9b38db1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentIOutterForArrayInnerThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+ object other = new IOutterForArray.Inner(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..630356f
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private static readonly int[] _firstValue = [7, 8, 9];
+ private static readonly int[] _secondValue = [10, 11, 12];
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ IOutterForArray.Inner first = new(_firstValue);
+ IOutterForArray.Inner second = new(_firstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ IOutterForArray.Inner first = new(_firstValue);
+ IOutterForArray.Inner second = new(_secondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
new file mode 100644
index 0000000..a2396a7
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenImplicitOperatorFromIntArrayIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ IOutterForArray.Inner result = _sampleValue;
+
+ // Act
+ int[] actual = result;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs
new file mode 100644
index 0000000..6e1a2af
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenImplicitOperatorToIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenImplicitOperatorToIntArrayIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ IOutterForArray.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (int[])subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ int[] actual = subject;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..47530f3
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner left = new(_sampleValue);
+ IOutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..3fe0d74
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject != _differentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..d5e4a6f
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = "Inner { System.Int32[] }";
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ IOutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..aeaac01
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ IOutterForInt.Inner instance = new(SampleValue);
+
+ // Act
+ int actual = instance;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..8bf48b9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIOutterForIntInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner? left = default;
+ IOutterForInt.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner? left = default;
+ IOutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..22b819e
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner? subject = default;
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == DifferentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..dc5e2b1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithIOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs
new file mode 100644
index 0000000..258c1f9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(SampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(DifferentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..895828e
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentIOutterForIntInnerThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+ object other = new IOutterForInt.Inner(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..b5c41c3
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private const int FirstValue = 5;
+ private const int SecondValue = 9;
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ IOutterForInt.Inner first = new(FirstValue);
+ IOutterForInt.Inner second = new(FirstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ IOutterForInt.Inner first = new(FirstValue);
+ IOutterForInt.Inner second = new(SecondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs
new file mode 100644
index 0000000..fd137f9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorFromIntIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenImplicitOperatorFromIntIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ IOutterForInt.Inner result = SampleValue;
+
+ // Act
+ int actual = result;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs
new file mode 100644
index 0000000..75df0df
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenImplicitOperatorToIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenImplicitOperatorToIntIsCalled
+{
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ IOutterForInt.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (int)subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ int actual = subject;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..fa28392
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIOutterForIntInnerIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner left = new(SampleValue);
+ IOutterForInt.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..efd89d4
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenInequalityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIntIsCalled
+{
+ private const int DifferentValue = 84;
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner? subject = default;
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != DifferentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..3f39b87
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForIntTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForIntTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = "Inner { 42 }";
+ private const int SampleValue = 42;
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ IOutterForInt.Inner subject = new(SampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..9a353f2
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ IOutterForString.Inner instance = new(SampleValue);
+
+ // Act
+ string actual = instance;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithIOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithIOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..1dd8c59
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithIOutterForStringInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner? left = default;
+ IOutterForString.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner? left = default;
+ IOutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..5dd53a1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualityOperatorWithStringIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenEqualityOperatorWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner? subject = default;
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject == DifferentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithIOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithIOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..2873bd1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithIOutterForStringInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithIOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..def40d9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentIOutterForStringInnerThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+ object other = new IOutterForString.Inner(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs
new file mode 100644
index 0000000..758affa
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenEqualsWithStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenEqualsWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(SampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject.Equals(DifferentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..da26ec1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private const string FirstValue = "Alpha";
+ private const string SecondValue = "Beta";
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ IOutterForString.Inner first = new(FirstValue);
+ IOutterForString.Inner second = new(FirstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ IOutterForString.Inner first = new(FirstValue);
+ IOutterForString.Inner second = new(SecondValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldNotBe(secondHash);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs
new file mode 100644
index 0000000..d834dfb
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorFromStringIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenImplicitOperatorFromStringIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ IOutterForString.Inner result = SampleValue;
+
+ // Act
+ string actual = result;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs
new file mode 100644
index 0000000..931ef44
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenImplicitOperatorToStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenImplicitOperatorToStringIsCalled
+{
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ IOutterForString.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (string)subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ string actual = subject;
+
+ // Assert
+ actual.ShouldBe(SampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithIOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithIOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..c51d7aa
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithIOutterForStringInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenInequalityOperatorWithIOutterForStringInnerIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(SampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner left = new(SampleValue);
+ IOutterForString.Inner right = new(DifferentValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..1370419
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenInequalityOperatorWithStringIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenInequalityOperatorWithStringIsCalled
+{
+ private const string SampleValue = "Sample";
+ private const string DifferentValue = "Different";
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner? subject = default;
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != SampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ bool actual = subject != DifferentValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..9400901
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForStringTests/InnerTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForStringTests.InnerTests;
+
+public static class WhenToStringIsCalled
+{
+ private const string Expected = $"Inner {{ {SampleValue} }}";
+ private const string SampleValue = "Sample";
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ IOutterForString.Inner subject = new(SampleValue);
+
+ // Act
+ string result = subject.ToString();
+
+ // Assert
+ result.ShouldBe(Expected);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..2b40d88
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenConstructorIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ OutterForArray.Inner instance = new(_sampleValue);
+
+ // Act
+ int[] actual = instance;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..b3e48a8
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _differentValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..80c3a44
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualityOperatorWithOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner? left = default;
+ OutterForArray.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner? left = default;
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray.Inner right = new(_differentValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..2483409
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithIntArrayIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_sampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_differentValue);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..edc6324
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentOutterForArrayInnerThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+ object other = new OutterForArray.Inner(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ OutterForArray.Inner subject = new(_sampleValue);
+ object other = string.Empty;
+
+ // Act
+ Action act = () => subject.Equals(other);
+
+ // Assert
+ _ = Should.Throw(act);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..bd4369c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InRecord/OutterForArrayTests/InnerTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InRecord.OutterForArrayTests.InnerTests;
+
+public static class WhenEqualsWithOutterForArrayInnerIsCalled
+{
+ private static readonly int[] _differentValue = [4, 5, 6];
+ private static readonly int[] _sampleValue = [1, 2, 3];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForArray.Inner left = new(_sampleValue);
+ OutterForArray