示例#1
0
        public void ConstructionPreservesValues()
        {
            var p1 = Product2.Create(42, "foo");

            Assert.Equal(42, p1.ProductValue1);
            Assert.Equal("foo", p1.ProductValue2);
        }
示例#2
0
 public void MorphismIsFunction()
 {
     Assert.Throws <ArgumentException>(() => Morphism.Create(
                                           Product2.Create(1, true),
                                           Product2.Create(1, false)
                                           ));
 }
示例#3
0
 public void IsoMorphismHasUniqueInverse()
 {
     Assert.Throws <ArgumentException>(() => Morphism.CreateIso(
                                           Product2.Create(1, true),
                                           Product2.Create(2, true)
                                           ));
 }
示例#4
0
        public void HashCodeDependsOnStructure()
        {
            var p1 = Product2.Create("foo", "bar");
            var p2 = Product2.Create("foo", "bar");
            var p3 = Product2.Create(12345, 67890);

            Assert.True(p1.GetHashCode() == p2.GetHashCode());
            Assert.False(p1.GetHashCode() == p3.GetHashCode());
        }
示例#5
0
        public void EqualsIsStructural()
        {
            var p1 = Product2.Create("foo", "bar");
            var p2 = Product2.Create("foo", "bar");
            var p3 = Product2.Create(12345, 67890);

            Assert.True(p1.Equals(p2));
            Assert.False(p1.Equals(p3));
        }
示例#6
0
        public void IsoMorphism()
        {
            var m = Morphism.CreateIso(
                Product2.Create(0, false),
                Product2.Create(1, true)
                );

            Assert.Equal(false.ToOption(), m.Apply(0));
            Assert.Equal(true.ToOption(), m.Apply(1));

            Assert.Equal(0.ToOption(), m.Inverse.Apply(false));
            Assert.Equal(1.ToOption(), m.Inverse.Apply(true));
        }
示例#7
0
        public void Apply()
        {
            var m = Morphism.Create(
                Product2.Create("foo", 123),
                Product2.Create("bar", 456),
                Product2.Create("baz", 789)
                );

            Assert.Equal(123.ToOption(), m.Apply("foo"));
            Assert.Equal(456.ToOption(), m.Apply("bar"));
            Assert.Equal(789.ToOption(), m.Apply("baz"));
            Assert.True(m.Apply("xyz").IsEmpty);
        }
示例#8
0
        public void DomainRange()
        {
            var m = Morphism.Create(
                Product2.Create(1, true),
                Product2.Create(2, true),
                Product2.Create(3, false)
                );

            Assert.Equal(3, m.Domain.Count());
            Assert.Contains(1, m.Domain);
            Assert.Contains(2, m.Domain);
            Assert.Contains(3, m.Domain);

            Assert.Equal(2, m.Range.Count());
            Assert.Contains(true, m.Range);
            Assert.Contains(false, m.Range);
        }