public void ConstructionPreservesValues() { var p1 = Product2.Create(42, "foo"); Assert.Equal(42, p1.ProductValue1); Assert.Equal("foo", p1.ProductValue2); }
public void MorphismIsFunction() { Assert.Throws <ArgumentException>(() => Morphism.Create( Product2.Create(1, true), Product2.Create(1, false) )); }
public void IsoMorphismHasUniqueInverse() { Assert.Throws <ArgumentException>(() => Morphism.CreateIso( Product2.Create(1, true), Product2.Create(2, true) )); }
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()); }
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)); }
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)); }
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); }
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); }