public void TestEquality_CaseInsensitivity()
        {
            AegisVirtualFilePath vpath1 = null;
            AegisVirtualFilePath vpath2 = null;

            // Bare file names.
            vpath1 = new AegisVirtualFilePath("foo.ags");
            vpath2 = new AegisVirtualFilePath("FOO.AGS");
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath2));
            Assert.IsTrue(vpath2.Equals(vpath1));

            // Files with paths -- file name casing differs.
            vpath1 = new AegisVirtualFilePath("/dir/foo.ags");
            vpath2 = new AegisVirtualFilePath("/dir/FOO.AGS");
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath2));
            Assert.IsTrue(vpath2.Equals(vpath1));

            // Files with paths -- directory casing differs.
            vpath1 = new AegisVirtualFilePath("/dir/foo.ags");
            vpath2 = new AegisVirtualFilePath("/DIR/foo.ags");
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath2));
            Assert.IsTrue(vpath2.Equals(vpath1));
        }
        public void TestEquality_NullComparisonChecks()
        {
            AegisVirtualFilePath vpath1;
            AegisVirtualFilePath vpath2;

            // Check equality for just one null reference.
            vpath1 = null;
            Assert.AreEqual(null, vpath1);

            // Both references are null.
            vpath1 = null;
            vpath2 = null;
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);

            // Non-null reference compared to null.
            vpath1 = new AegisVirtualFilePath("foo.ags");
            Assert.IsFalse(vpath1 == null);
            Assert.IsFalse(null == vpath1);
            Assert.IsFalse(vpath1.Equals(null));
            Assert.IsFalse(vpath1.Equals((object)null));
        }
        public void TestEquality_BasicChecks()
        {
            AegisVirtualFilePath vpath1;
            AegisVirtualFilePath vpath2;

            // Bare file name -- compare to self.
            vpath1 = new AegisVirtualFilePath("foo.ags");
#pragma warning disable CS1718 // Comparison made to same variable
            Assert.IsTrue(vpath1 == vpath1);
            Assert.IsFalse(vpath1 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath1));
#pragma warning restore CS1718 // Comparison made to same variable

            // Matching bare file names -- compare to each other.
            vpath1 = new AegisVirtualFilePath("foo.ags");
            vpath2 = new AegisVirtualFilePath("foo.ags");
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath2));
            Assert.IsTrue(vpath2.Equals(vpath1));

            // Mismatching bare file names -- compare to each other.
            vpath1 = new AegisVirtualFilePath("foo.ags");
            vpath2 = new AegisVirtualFilePath("bar.ags");
            Assert.IsFalse(vpath1 == vpath2);
            Assert.IsFalse(vpath2 == vpath1);
            Assert.IsTrue(vpath1 != vpath2);
            Assert.IsTrue(vpath2 != vpath1);
            Assert.IsFalse(vpath1.Equals(vpath2));
            Assert.IsFalse(vpath2.Equals(vpath1));

            // File with path -- compare to self.
            vpath1 = new AegisVirtualFilePath("/dir/foo.ags");
#pragma warning disable CS1718 // Comparison made to same variable
            Assert.IsTrue(vpath1 == vpath1);
            Assert.IsFalse(vpath1 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath1));
#pragma warning restore CS1718 // Comparison made to same variable

            // Matching files with paths -- compare to each other.
            vpath1 = new AegisVirtualFilePath("/dir/foo.ags");
            vpath2 = new AegisVirtualFilePath("/dir/foo.ags");
            Assert.IsTrue(vpath1 == vpath2);
            Assert.IsTrue(vpath2 == vpath1);
            Assert.IsFalse(vpath1 != vpath2);
            Assert.IsFalse(vpath2 != vpath1);
            Assert.IsTrue(vpath1.Equals(vpath2));
            Assert.IsTrue(vpath2.Equals(vpath1));

            // Mismatching files with paths -- compare to each other.
            vpath1 = new AegisVirtualFilePath("/dir/foo.ags");
            vpath2 = new AegisVirtualFilePath("/wat/foo.ags");
            Assert.IsFalse(vpath1 == vpath2);
            Assert.IsFalse(vpath2 == vpath1);
            Assert.IsTrue(vpath1 != vpath2);
            Assert.IsTrue(vpath2 != vpath1);
            Assert.IsFalse(vpath1.Equals(vpath2));
            Assert.IsFalse(vpath2.Equals(vpath1));
        }