Example #1
0
        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            // see Effective Java by Joshua Bloch
            int hash = 17;

            hash = 37 * hash + chunkSize.GetHashCode();
            hash = 37 * hash + root.GetHashCode();
            hash = 37 * hash + safeMode.GetHashCode();
            return(hash);
        }
        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            if (_isFrozen)
            {
                return(_frozenHashCode);
            }

            // see Effective Java by Joshua Bloch
            int hash = 17;

            hash = 37 * hash + _chunkSize.GetHashCode();
            hash = 37 * hash + _root.GetHashCode();
            hash = 37 * hash + _safeMode.GetHashCode();
            return(hash);
        }
        public void TestEquals()
        {
            var a1 = new SafeMode(false);
            var a2 = new SafeMode(true)
            {
                Enabled = false
            };
            var a3 = a2;
            var b  = new SafeMode(false)
            {
                Enabled = true
            };
            var c = new SafeMode(false)
            {
                FSync = true
            };
            var d = new SafeMode(false)
            {
                Journal = true
            };
            var e = new SafeMode(false)
            {
                W = 2
            };
            var f = new SafeMode(false)
            {
                WMode = "mode"
            };
            var g = new SafeMode(false)
            {
                W = 2, WTimeout = TimeSpan.FromMinutes(1)
            };
            var null1 = (SafeMode)null;
            var null2 = (SafeMode)null;

            Assert.AreNotSame(a1, a2);
            Assert.AreSame(a2, a3);
            Assert.IsTrue(a1.Equals((object)a2));
            Assert.IsFalse(a1.Equals((object)null));
            Assert.IsFalse(a1.Equals((object)"x"));

            Assert.IsTrue(a1 == a2);
            Assert.IsTrue(a2 == a3);
            Assert.IsFalse(a1 == b);
            Assert.IsFalse(a1 == c);
            Assert.IsFalse(a1 == d);
            Assert.IsFalse(a1 == e);
            Assert.IsFalse(a1 == f);
            Assert.IsFalse(a1 == g);
            Assert.IsFalse(a1 == null1);
            Assert.IsFalse(null1 == a1);
            Assert.IsTrue(null1 == null2);

            Assert.IsFalse(a1 != a2);
            Assert.IsFalse(a2 != a3);
            Assert.IsTrue(a1 != b);
            Assert.IsTrue(a1 != c);
            Assert.IsTrue(a1 != d);
            Assert.IsTrue(a1 != e);
            Assert.IsTrue(a1 != f);
            Assert.IsTrue(a1 != g);
            Assert.IsTrue(a1 != null1);
            Assert.IsTrue(null1 != a1);
            Assert.IsFalse(null1 != null2);

            var hash = a1.GetHashCode();

            Assert.AreEqual(hash, a2.GetHashCode());

            // check that all tests still pass after objects are Frozen
            a1.Freeze();
            a2.Freeze();
            a3.Freeze();
            b.Freeze();
            c.Freeze();
            d.Freeze();
            e.Freeze();
            f.Freeze();
            g.Freeze();

            Assert.AreNotSame(a1, a2);
            Assert.AreSame(a2, a3);
            Assert.IsTrue(a1.Equals((object)a2));
            Assert.IsFalse(a1.Equals((object)null));
            Assert.IsFalse(a1.Equals((object)"x"));

            Assert.IsTrue(a1 == a2);
            Assert.IsTrue(a2 == a3);
            Assert.IsFalse(a1 == b);
            Assert.IsFalse(a1 == c);
            Assert.IsFalse(a1 == d);
            Assert.IsFalse(a1 == e);
            Assert.IsFalse(a1 == f);
            Assert.IsFalse(a1 == g);
            Assert.IsFalse(a1 == null1);
            Assert.IsFalse(null1 == a1);
            Assert.IsTrue(null1 == null2);

            Assert.IsFalse(a1 != a2);
            Assert.IsFalse(a2 != a3);
            Assert.IsTrue(a1 != b);
            Assert.IsTrue(a1 != c);
            Assert.IsTrue(a1 != d);
            Assert.IsTrue(a1 != e);
            Assert.IsTrue(a1 != f);
            Assert.IsTrue(a1 != g);
            Assert.IsTrue(a1 != null1);
            Assert.IsTrue(null1 != a1);
            Assert.IsFalse(null1 != null2);

            Assert.AreEqual(hash, a1.GetHashCode());
            Assert.AreEqual(hash, a2.GetHashCode());
        }