diff --git a/.editorconfig b/.editorconfig
index 6000037..bfb9123 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -175,13 +175,15 @@ dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = error
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
-dotnet_naming_rule.private_constant_should_be_pascal_case.severity = error
-dotnet_naming_rule.private_constant_should_be_pascal_case.symbols = private_constant
-dotnet_naming_rule.private_constant_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.private_constant_fields_should_be_pascal_case.severity = error
+dotnet_naming_rule.private_constant_fields_should_be_pascal_case.symbols = private_constant_fields
+dotnet_naming_rule.private_constant_fields_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.private_constant_fields_should_be_pascal_case.priority = 1
-dotnet_naming_rule.private_static_field_should_be_camel_case.severity = error
-dotnet_naming_rule.private_static_field_should_be_camel_case.symbols = private_static_field
-dotnet_naming_rule.private_static_field_should_be_camel_case.style = camel_case
+dotnet_naming_rule.private_fields_should_be_camel_case_with_underscore_prefix.severity = error
+dotnet_naming_rule.private_fields_should_be_camel_case_with_underscore_prefix.symbols = private_fields
+dotnet_naming_rule.private_fields_should_be_camel_case_with_underscore_prefix.style = camel_case_underscore_prefix
+dotnet_naming_rule.private_fields_should_be_camel_case_with_underscore_prefix.priority = 2
# Symbol specifications
@@ -197,13 +199,13 @@ dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, meth
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal
dotnet_naming_symbols.non_field_members.required_modifiers =
-dotnet_naming_symbols.private_static_field.applicable_kinds = field
-dotnet_naming_symbols.private_static_field.applicable_accessibilities = private
-dotnet_naming_symbols.private_static_field.required_modifiers = static
+dotnet_naming_symbols.private_fields.applicable_kinds = field
+dotnet_naming_symbols.private_fields.applicable_accessibilities = private
+dotnet_naming_symbols.private_fields.required_modifiers =
-dotnet_naming_symbols.private_constant.applicable_kinds = field
-dotnet_naming_symbols.private_constant.applicable_accessibilities = private
-dotnet_naming_symbols.private_constant.required_modifiers = const
+dotnet_naming_symbols.private_constant_fields.applicable_kinds = field
+dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private
+dotnet_naming_symbols.private_constant_fields.required_modifiers = const
# Naming styles
@@ -221,6 +223,11 @@ dotnet_naming_style.camel_case.required_prefix =
dotnet_naming_style.camel_case.required_suffix =
dotnet_naming_style.camel_case.word_separator =
dotnet_naming_style.camel_case.capitalization = camel_case
+
+dotnet_naming_style.camel_case_underscore_prefix.required_prefix = _
+dotnet_naming_style.camel_case_underscore_prefix.required_suffix =
+dotnet_naming_style.camel_case_underscore_prefix.word_separator =
+dotnet_naming_style.camel_case_underscore_prefix.capitalization = camel_case
dotnet_diagnostic.S1117.severity = none
dotnet_diagnostic.SA1506.severity=silent
dotnet_diagnostic.SA1500.severity=error
diff --git a/AGENTS.md b/AGENTS.md
index 2e4f66b..5522087 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -30,6 +30,7 @@ The project enforces strong C# coding conventions through `.editorconfig`, [Styl
- Use `var` for local variables when the type is clear from the right-hand side.
- Use `nameof` for member names in exceptions and logging.
- Use `string.Empty` instead of `""` for empty strings.
+- When possible, place declarations in alphabetical order (e.g. fields, parameters, properties, methods).
### Unit Testing Conventions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9cc583..b308626 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,13 @@ 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] - 2025-10-31
+
+## Fixed
+- MONFY03 is no longer raised if the encapsulated type cannot be determined (#22).
+- 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/Monify.sln b/Monify.sln
index 382f4ac..b593a2f 100644
--- a/Monify.sln
+++ b/Monify.sln
@@ -65,6 +65,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rules", "Rules", "{DF5E2435
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monify.Tests", "src\Monify.Tests\Monify.Tests.csproj", "{9C2086AB-647E-485E-A964-A4A383354230}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monify.Console", "src\Monify.Console\Monify.Console.csproj", "{8EC2148F-0491-4116-AC04-C4A0AD013C82}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monify.Console.Tests", "src\Monify.Console.Tests\Monify.Console.Tests.csproj", "{5EE36FF0-4AA4-4EB1-A6C9-9FE144B1D4FB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -79,6 +83,14 @@ Global
{9C2086AB-647E-485E-A964-A4A383354230}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C2086AB-647E-485E-A964-A4A383354230}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C2086AB-647E-485E-A964-A4A383354230}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8EC2148F-0491-4116-AC04-C4A0AD013C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8EC2148F-0491-4116-AC04-C4A0AD013C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8EC2148F-0491-4116-AC04-C4A0AD013C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8EC2148F-0491-4116-AC04-C4A0AD013C82}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5EE36FF0-4AA4-4EB1-A6C9-9FE144B1D4FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5EE36FF0-4AA4-4EB1-A6C9-9FE144B1D4FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5EE36FF0-4AA4-4EB1-A6C9-9FE144B1D4FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5EE36FF0-4AA4-4EB1-A6C9-9FE144B1D4FB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
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/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..1ed460c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenEqualityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..222798d
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..7ed83b4
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualityOperatorWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,79 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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 GivenEquivalentValuesThenReturnTrue()
+ {
+ // Arrange
+ int[] leftValues = [1, 2, 3];
+ int[] rightValues = [1, 2, 3];
+ OutterForArray.Inner left = new(leftValues);
+ OutterForArray.Inner right = new(rightValues);
+
+ // 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/WhenEqualsWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..d45414e
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..9804cc9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenEqualsWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..25910c2
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenEqualsWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..0775045
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenImplicitOperatorFromIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
new file mode 100644
index 0000000..0917c5e
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenImplicitOperatorToIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenImplicitOperatorToIntArrayIsCalled.cs
new file mode 100644
index 0000000..e894fbf
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenImplicitOperatorToIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenInequalityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..3a31d4a
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..8e3d20f
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenInequalityOperatorWithOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,51 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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 GivenEquivalentValuesThenReturnFalse()
+ {
+ // Arrange
+ int[] leftValues = [1, 2, 3];
+ int[] rightValues = [1, 2, 3];
+ OutterForArray.Inner left = new(leftValues);
+ OutterForArray.Inner right = new(rightValues);
+
+ // 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/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..eaef174
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForArrayTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForArrayTests;
+
+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/OutterForImmutableArrayTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..659cdfb
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,21 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenConstructorIsCalled
+{
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner instance = new(_sampleValue);
+
+ // Act
+ ImmutableArray actual = instance;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualityOperatorWithImmutableArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualityOperatorWithImmutableArrayIsCalled.cs
new file mode 100644
index 0000000..20e7e01
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualityOperatorWithImmutableArrayIsCalled.cs
@@ -0,0 +1,48 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualityOperatorWithImmutableArrayIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject == _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenEqualityOperatorWithOutterForImmutableArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualityOperatorWithOutterForImmutableArrayInnerIsCalled.cs
new file mode 100644
index 0000000..8bfbeb7
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualityOperatorWithOutterForImmutableArrayInnerIsCalled.cs
@@ -0,0 +1,81 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualityOperatorWithOutterForImmutableArrayInnerIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner? left = default;
+ OutterForImmutableArray.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner? left = default;
+ OutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenEquivalentValuesThenReturnTrue()
+ {
+ // Arrange
+ ImmutableArray leftValues = ["Alpha", "Beta", "Gamma"];
+ ImmutableArray rightValues = ["Alpha", "Beta", "Gamma"];
+ OutterForImmutableArray.Inner left = new(leftValues);
+ OutterForImmutableArray.Inner right = new(rightValues);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenEqualsWithImmutableArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithImmutableArrayIsCalled.cs
new file mode 100644
index 0000000..7cfdd2b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithImmutableArrayIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualsWithImmutableArrayIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(_sampleValue);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..4cad7b0
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,49 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualsWithObjectIsCalled
+{
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenNullThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals((object?)default);
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentOutterForImmutableArrayInnerThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+ object other = new OutterForImmutableArray.Inner(_sampleValue);
+
+ // Act
+ bool actual = subject.Equals(other);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentTypeThenThrowInvalidCastException()
+ {
+ // Arrange
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenEqualsWithOutterForImmutableArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithOutterForImmutableArrayInnerIsCalled.cs
new file mode 100644
index 0000000..f98019b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenEqualsWithOutterForImmutableArrayInnerIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualsWithOutterForImmutableArrayInnerIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left.Equals(right);
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..a85bec1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,39 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenGetHashCodeIsCalled
+{
+ private static readonly ImmutableArray _firstValue = ["Eta", "Theta", "Iota"];
+ private static readonly ImmutableArray _secondValue = ["Kappa", "Lambda", "Mu"];
+
+ [Fact]
+ public static void GivenSameValuesThenReturnSameHashCode()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner first = new(_firstValue);
+ OutterForImmutableArray.Inner second = new(_firstValue);
+
+ // Act
+ int firstHash = first.GetHashCode();
+ int secondHash = second.GetHashCode();
+
+ // Assert
+ firstHash.ShouldBe(secondHash);
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnDifferentHashCodes()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner first = new(_firstValue);
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenImplicitOperatorFromImmutableArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenImplicitOperatorFromImmutableArrayIsCalled.cs
new file mode 100644
index 0000000..3e4992c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenImplicitOperatorFromImmutableArrayIsCalled.cs
@@ -0,0 +1,21 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenImplicitOperatorFromImmutableArrayIsCalled
+{
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenValueThenReturnsEquivalentInstance()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner result = _sampleValue;
+
+ // Act
+ ImmutableArray actual = result;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenImplicitOperatorToImmutableArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenImplicitOperatorToImmutableArrayIsCalled.cs
new file mode 100644
index 0000000..f82853d
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenImplicitOperatorToImmutableArrayIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenImplicitOperatorToImmutableArrayIsCalled
+{
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenNullSubjectThenThrowsArgumentNullException()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner? subject = default;
+
+ // Act
+ Action act = () => _ = (ImmutableArray)subject!;
+
+ // Assert
+ ArgumentNullException exception = Should.Throw(act);
+ exception.ParamName.ShouldBe(nameof(subject));
+ }
+
+ [Fact]
+ public static void GivenValidSubjectThenReturnsValue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+
+ // Act
+ ImmutableArray actual = subject;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenInequalityOperatorWithImmutableArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenInequalityOperatorWithImmutableArrayIsCalled.cs
new file mode 100644
index 0000000..2911c13
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenInequalityOperatorWithImmutableArrayIsCalled.cs
@@ -0,0 +1,48 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenInequalityOperatorWithImmutableArrayIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenSubjectIsNullThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner? subject = default;
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner subject = new(_sampleValue);
+
+ // Act
+ bool actual = subject != _sampleValue;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValueThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenInequalityOperatorWithOutterForImmutableArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenInequalityOperatorWithOutterForImmutableArrayInnerIsCalled.cs
new file mode 100644
index 0000000..e4fd170
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenInequalityOperatorWithOutterForImmutableArrayInnerIsCalled.cs
@@ -0,0 +1,53 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenInequalityOperatorWithOutterForImmutableArrayInnerIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenSameValueThenReturnFalse()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenEquivalentValuesThenReturnFalse()
+ {
+ // Arrange
+ ImmutableArray leftValues = ["Alpha", "Beta", "Gamma"];
+ ImmutableArray rightValues = ["Alpha", "Beta", "Gamma"];
+ OutterForImmutableArray.Inner left = new(leftValues);
+ OutterForImmutableArray.Inner right = new(rightValues);
+
+ // Act
+ bool actual = left != right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenDifferentValuesThenReturnTrue()
+ {
+ // Arrange
+ OutterForImmutableArray.Inner left = new(_sampleValue);
+ OutterForImmutableArray.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/OutterForImmutableArrayTests/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..0955260
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForImmutableArrayTests/WhenToStringIsCalled.cs
@@ -0,0 +1,22 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenToStringIsCalled
+{
+ private static readonly string Expected = $"Inner {{ {typeof(ImmutableArray)} }}";
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenValueTheExpectedStringIsReturned()
+ {
+ // Arrange
+ OutterForImmutableArray.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/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..671b353
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenEqualityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..084b1aa
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..85d8a4c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualityOperatorWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,63 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenEqualsWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithIntIsCalled.cs
new file mode 100644
index 0000000..1145d64
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..13a34dc
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenEqualsWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..4808519
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenEqualsWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..c6d95f3
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenImplicitOperatorFromIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenImplicitOperatorFromIntIsCalled.cs
new file mode 100644
index 0000000..8d82f86
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenImplicitOperatorFromIntIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenImplicitOperatorToIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenImplicitOperatorToIntIsCalled.cs
new file mode 100644
index 0000000..ac6854c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenImplicitOperatorToIntIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenInequalityOperatorWithIntIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenInequalityOperatorWithIntIsCalled.cs
new file mode 100644
index 0000000..8a60df0
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenInequalityOperatorWithIntIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs
new file mode 100644
index 0000000..f7083f6
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenInequalityOperatorWithOutterForIntInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..5313eb1
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForIntTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForIntTests;
+
+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/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..681675d
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..89f7f1c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualityOperatorWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,79 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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 GivenEquivalentValuesThenReturnTrue()
+ {
+ // Arrange
+ string leftValue = new(SampleValue.ToCharArray());
+ string rightValue = new(SampleValue.ToCharArray());
+ OutterForString.Inner left = new(leftValue);
+ OutterForString.Inner right = new(rightValue);
+
+ // 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/WhenEqualityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..9d0d4c9
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualityOperatorWithStringIsCalled.cs
@@ -0,0 +1,61 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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 GivenEquivalentValueThenReturnTrue()
+ {
+ // Arrange
+ string subjectValue = new(SampleValue.ToCharArray());
+ string comparisonValue = new(SampleValue.ToCharArray());
+ OutterForString.Inner subject = new(subjectValue);
+
+ // Act
+ bool actual = subject == comparisonValue;
+
+ // 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/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..bd5f698
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenEqualsWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..dbb1ded
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenEqualsWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithStringIsCalled.cs
new file mode 100644
index 0000000..c2e740a
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenEqualsWithStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..b59b59f
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenImplicitOperatorFromStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenImplicitOperatorFromStringIsCalled.cs
new file mode 100644
index 0000000..62ae177
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenImplicitOperatorFromStringIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenImplicitOperatorToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenImplicitOperatorToStringIsCalled.cs
new file mode 100644
index 0000000..65f1892
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenImplicitOperatorToStringIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs
new file mode 100644
index 0000000..ef6fa3c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenInequalityOperatorWithOutterForStringInnerIsCalled.cs
@@ -0,0 +1,51 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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 GivenEquivalentValuesThenReturnFalse()
+ {
+ // Arrange
+ string leftValue = new(SampleValue.ToCharArray());
+ string rightValue = new(SampleValue.ToCharArray());
+ OutterForString.Inner left = new(leftValue);
+ OutterForString.Inner right = new(rightValue);
+
+ // 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/WhenInequalityOperatorWithStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenInequalityOperatorWithStringIsCalled.cs
new file mode 100644
index 0000000..cd220fd
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenInequalityOperatorWithStringIsCalled.cs
@@ -0,0 +1,61 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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 GivenEquivalentValueThenReturnFalse()
+ {
+ // Arrange
+ string subjectValue = new(SampleValue.ToCharArray());
+ string comparisonValue = new(SampleValue.ToCharArray());
+ OutterForString.Inner subject = new(subjectValue);
+
+ // Act
+ bool actual = subject != comparisonValue;
+
+ // 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/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..a997572
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InClass/OutterForStringTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InClass.OutterForStringTests;
+
+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/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..b12a038
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..24b9d8c
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualityOperatorWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,79 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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 GivenEquivalentValuesThenReturnTrue()
+ {
+ // Arrange
+ int[] leftValues = [1, 2, 3];
+ int[] rightValues = [1, 2, 3];
+ IOutterForArray.Inner left = new(leftValues);
+ IOutterForArray.Inner right = new(rightValues);
+
+ // 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/WhenEqualityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..863552b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenEqualsWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..53801b0
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,35 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenEqualsWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..9d9125b
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenEqualsWithObjectIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithObjectIsCalled.cs
new file mode 100644
index 0000000..ce5338d
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenEqualsWithObjectIsCalled.cs
@@ -0,0 +1,47 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenGetHashCodeIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenGetHashCodeIsCalled.cs
new file mode 100644
index 0000000..3fd0260
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenGetHashCodeIsCalled.cs
@@ -0,0 +1,37 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenImplicitOperatorFromIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
new file mode 100644
index 0000000..12edef7
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenImplicitOperatorFromIntArrayIsCalled.cs
@@ -0,0 +1,19 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenImplicitOperatorToIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenImplicitOperatorToIntArrayIsCalled.cs
new file mode 100644
index 0000000..51e0ee8
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenImplicitOperatorToIntArrayIsCalled.cs
@@ -0,0 +1,33 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs
new file mode 100644
index 0000000..983ec05
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenInequalityOperatorWithIOutterForArrayInnerIsCalled.cs
@@ -0,0 +1,51 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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 GivenEquivalentValuesThenReturnFalse()
+ {
+ // Arrange
+ int[] leftValues = [1, 2, 3];
+ int[] rightValues = [1, 2, 3];
+ IOutterForArray.Inner left = new(leftValues);
+ IOutterForArray.Inner right = new(rightValues);
+
+ // 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/WhenInequalityOperatorWithIntArrayIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
new file mode 100644
index 0000000..36cd5c2
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenInequalityOperatorWithIntArrayIsCalled.cs
@@ -0,0 +1,46 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/WhenToStringIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenToStringIsCalled.cs
new file mode 100644
index 0000000..ce5b910
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForArrayTests/WhenToStringIsCalled.cs
@@ -0,0 +1,20 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForArrayTests;
+
+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/IOutterForImmutableArrayTests/WhenConstructorIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForImmutableArrayTests/WhenConstructorIsCalled.cs
new file mode 100644
index 0000000..1774750
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForImmutableArrayTests/WhenConstructorIsCalled.cs
@@ -0,0 +1,21 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenConstructorIsCalled
+{
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenValueThenValueIsStored()
+ {
+ // Arrange
+ IOutterForImmutableArray.Inner instance = new(_sampleValue);
+
+ // Act
+ ImmutableArray actual = instance;
+
+ // Assert
+ actual.ShouldBe(_sampleValue);
+ }
+}
\ No newline at end of file
diff --git a/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForImmutableArrayTests/WhenEqualityOperatorWithIOutterForImmutableArrayInnerIsCalled.cs b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForImmutableArrayTests/WhenEqualityOperatorWithIOutterForImmutableArrayInnerIsCalled.cs
new file mode 100644
index 0000000..48f9a40
--- /dev/null
+++ b/src/Monify.Console.Tests/Classes/Nested/InInterface/IOutterForImmutableArrayTests/WhenEqualityOperatorWithIOutterForImmutableArrayInnerIsCalled.cs
@@ -0,0 +1,81 @@
+namespace Monify.Console.Classes.Nested.InInterface.IOutterForImmutableArrayTests;
+
+using System.Collections.Immutable;
+
+public static class WhenEqualityOperatorWithIOutterForImmutableArrayInnerIsCalled
+{
+ private static readonly ImmutableArray _differentValue = ["Delta", "Epsilon", "Zeta"];
+ private static readonly ImmutableArray _sampleValue = ["Alpha", "Beta", "Gamma"];
+
+ [Fact]
+ public static void GivenBothNullThenReturnTrue()
+ {
+ // Arrange
+ IOutterForImmutableArray.Inner? left = default;
+ IOutterForImmutableArray.Inner? right = default;
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenLeftIsNullThenReturnFalse()
+ {
+ // Arrange
+ IOutterForImmutableArray.Inner? left = default;
+ IOutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeFalse();
+ }
+
+ [Fact]
+ public static void GivenSameValueThenReturnTrue()
+ {
+ // Arrange
+ IOutterForImmutableArray.Inner left = new(_sampleValue);
+ IOutterForImmutableArray.Inner right = new(_sampleValue);
+
+ // Act
+ bool actual = left == right;
+
+ // Assert
+ actual.ShouldBeTrue();
+ }
+
+ [Fact]
+ public static void GivenEquivalentValuesThenReturnTrue()
+ {
+ // Arrange
+ ImmutableArray leftValues = ["Alpha", "Beta", "Gamma"];
+ ImmutableArray rightValues = ["Alpha", "Beta", "Gamma"];
+ IOutterForImmutableArray