コード例 #1
0
        public void Equals_ValuesDifferentValue_ReturnsFalse()
        {
            var some1 = new Some<string>("value 1");
            var some2 = new Some<string>("value 2");

            Assert.IsFalse(some1.Equals(some2));
        }
コード例 #2
0
        public void Equals_SomeAgainstInnerValue_ReturnsExpected(int a, int b, bool expected)
        {
            Some <int> someA  = a;
            var        result = someA.Equals(b);

            result.Should().Be(expected);
        }
コード例 #3
0
 public void SomeEqualsWorksOnValueTypes()
 {
     var some1 = new Some<int>(42);
     var some2 = new Some<int>(42);
     Assert.True(some1.Equals(some2));
     Assert.True(some2.Equals(some1));
 }
コード例 #4
0
 public void SomeEqualsWorkOnReferenceTypesWithCorrectEqualitySemantics()
 {
     var some1 = new Some<Item>(new Item(42));
     var some2 = new Some<Item>(new Item(42));
     Assert.True(some1.Equals(some2));
     Assert.True(some2.Equals(some1));
 }
コード例 #5
0
        public void Equals_SomeAgainstSome_ReturnsExpected(int a, int b, bool expected)
        {
            Some <int> someA  = a;
            Some <int> someB  = b;
            var        result = someA.Equals(someB);

            result.Should().Be(expected);
        }
コード例 #6
0
        public void SomeEqualsWorkOnReferenceTypesWithCorrectEqualitySemantics()
        {
            var some1 = new Some <Item>(new Item(42));
            var some2 = new Some <Item>(new Item(42));

            Assert.True(some1.Equals(some2));
            Assert.True(some2.Equals(some1));
        }
コード例 #7
0
        public void SomeEqualsWorksOnValueTypes()
        {
            var some1 = new Some <int>(42);
            var some2 = new Some <int>(42);

            Assert.True(some1.Equals(some2));
            Assert.True(some2.Equals(some1));
        }
コード例 #8
0
        public void Equals_ComparisonSomeDefault_ThrowsNotInitializedException()
        {
            Some <int> someA = 5;
            Some <int> someB = default;

            Func <bool> call = () => someA.Equals(someB);

            call.Should().ThrowExactly <NotInitializedException>();
        }
コード例 #9
0
ファイル: SomeTests.cs プロジェクト: bdlane/Functional
        public void TwoInstancesAreNotEqualWhenTheirContainedValuesAreNotEqual(Some <Guid> m1, Some <Guid> m2)
        {
            // Arrange

            // Act

            // Assert
            m1.Equals((object)m2).Should().BeFalse();
        }
コード例 #10
0
        public void Equals_SomeObjectsAreEqual_ReturnsTrue()
        {
            var value = "this is a value";

            var some1 = new Some<string>(value);
            var some2 = new Some<string>(value);

            Assert.IsTrue(some1.Equals(some2));
        }
コード例 #11
0
        public void Equals_ObjectsNotSameType_ReturnsFalse()
        {
            var value = "this is a value";

            var some1 = new Some<string>(value);
            var some2 = new Some<object>(value);

            Assert.IsFalse(some1.Equals(some2));
        }
コード例 #12
0
ファイル: SomeTests.cs プロジェクト: bdlane/Functional
        public void TwoInstancesAreEqualWhenTheirContainedValuesAreEqual(Guid value)
        {
            // Arrange
            Some <Guid> m1 = new Some <Guid>(value);
            Some <Guid> m2 = new Some <Guid>(value);

            // Act

            // Assert
            m1.Equals(m2).Should().BeTrue();
        }
コード例 #13
0
ファイル: INode.cs プロジェクト: jsbattig/nctrie
        /**
         * Removes the key associated with the given value.
         *
         * @param v
         *            if null, will remove the key irregardless of the value;
         *            otherwise removes only if binding contains that exact key
         *            and value
         * @return null if not successful, an Option[V] indicating the previous
         *         value otherwise
         */
        public Option <V> rec_remove(K k, V v, int hc, int lev, INode <K, V> parent, Gen startgen, ConcurrentTrieDictionary <K, V> ct)
        {
            MainNode <K, V> m = GCAS_READ(ct); // use -Yinline!

            if (m is CNode <K, V> )
            {
                CNode <K, V> cn   = (CNode <K, V>)m;
                int          idx  = (int)((uint)hc >> lev) & 0x1f;
                int          bmp  = cn.bitmap;
                int          flag = 1 << idx;
                if ((bmp & flag) == 0)
                {
                    return(Option <V> .makeOption());
                }
                else
                {
                    int        pos = JavaCompat.SparseBitcount(bmp & (flag - 1));
                    BasicNode  sub = cn.array[pos];
                    Option <V> res = null;
                    if (sub is INode <K, V> )
                    {
                        INode <K, V> _in = (INode <K, V>)sub;
                        if (startgen == _in.gen)
                        {
                            res = _in.rec_remove(k, v, hc, lev + 5, this, startgen, ct);
                        }
                        else
                        {
                            if (GCAS(cn, cn.renewed(startgen, ct), ct))
                            {
                                res = rec_remove(k, v, hc, lev, parent, startgen, ct);
                            }
                            else
                            {
                                res = null;
                            }
                        }
                    }
                    else if (sub is SNode <K, V> )
                    {
                        SNode <K, V> sn = (SNode <K, V>)sub;
                        if (sn.hc == hc && equal(sn.k, k, ct) && (v == null || v.Equals(sn.v)))
                        {
                            MainNode <K, V> ncn = cn.removedAt(pos, flag, gen).toContracted(lev);
                            if (GCAS(cn, ncn, ct))
                            {
                                res = Option <V> .makeOption(sn.v);
                            }
                            else
                            {
                                res = null;
                            }
                        }
                        else
                        {
                            res = Option <V> .makeOption();
                        }
                    }

                    if (res is None <V> || (res == null))
                    {
                        return(res);
                    }
                    else
                    {
                        if (parent != null)
                        { // never tomb at root
                            MainNode <K, V> n = GCAS_READ(ct);
                            if (n is TNode <K, V> )
                            {
                                cleanParent(n, parent, ct, hc, lev, startgen);
                            }
                        }

                        return(res);
                    }
                }
            }
            else if (m is TNode <K, V> )
            {
                clean(parent, ct, lev - 5);
                return(null);
            }
            else if (m is LNode <K, V> )
            {
                LNode <K, V> ln = (LNode <K, V>)m;
                if (v == null)
                {
                    Option <V>      optv = ln.get(k);
                    MainNode <K, V> nn   = ln.removed(k, ct);
                    if (GCAS(ln, nn, ct))
                    {
                        return(optv);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    Option <V> tmp = ln.get(k);
                    if (tmp is Some <V> )
                    {
                        Some <V> tmp1 = (Some <V>)tmp;
                        if (tmp1.Equals(v))
                        {
                            MainNode <K, V> nn = ln.removed(k, ct);
                            if (GCAS(ln, nn, ct))
                            {
                                return(tmp);
                            }
                            else
                            {
                                return(null);
                            }
                        }
                    }
                }
            }
            throw new RuntimeException("Should not happen");
        }