public void Concatenation() { foreach (var r1 in someRopes) { foreach (var r2 in someRopes) { foreach (var r3 in someRopes) { Rope c1 = Rope.Concat(r1, Rope.Concat(r2, r3)); Rope c2 = Rope.Concat(Rope.Concat(r1, r2), r3); Assert.Equal(c1, c2); // associative Assert.Equal(c1.GetHashCode(), c2.GetHashCode()); string s = r1.ToString() + r2.ToString() + r3.ToString(); Assert.Equal(c1.ToString(), s); Assert.Equal(c2.ToString(), s); Rope c3 = Rope.ForString(s); Assert.Equal(c1.GetHashCode(), c3.GetHashCode()); Assert.Equal(c1, c3); Assert.Equal(c2, c3); Assert.Equal(c3.ToString(), s); } } } }
public override int GetHashCode() => Hash.Combine(base.GetHashCode(), _value.GetHashCode());