Returns a MonotonicVersioner with an identical chronology, but which can advance its versions separately.
public void General_Clone() { var seed = new SemanticVersion[] { new SemanticVersion(1, 0), new SemanticVersion(1, 1), new SemanticVersion(1, 2), new SemanticVersion(2, 3), new SemanticVersion(2, 4), new SemanticVersion(3, 5), new SemanticVersion(1, 6), }; var mv0 = new MonotonicVersioner(seed); // Here we go. var mv1 = mv0.Clone(); // The instances should not be the same instance. Assert.IsFalse(object.ReferenceEquals(mv0, mv1)); // But they should start with the same chronology. Assert.IsTrue(mv0.Chronology.SequenceEqual(mv1.Chronology)); // And should have the same values for other properties. Assert.AreEqual(mv0.Latest, mv1.Latest); Assert.AreEqual(mv0.Compatibility, mv1.Compatibility); Assert.AreEqual(mv0.Release, mv1.Release); Assert.IsTrue(mv0.LatestVersions.SequenceEqual(mv1.LatestVersions)); // But if we advance one, it shouldn't affect the other. var mv1_lat = mv1.Latest; mv0.Next(MonotonicChange.Compatible); Assert.AreEqual(new SemanticVersion(1, 7), mv0.Latest); Assert.AreEqual(mv1_lat, mv1.Latest); Assert.AreNotEqual(mv0.Latest, mv1.Latest); var mv0_lat = mv0.Latest; mv1.Next(MonotonicChange.Breaking); Assert.AreEqual(new SemanticVersion(4, 7), mv1.Latest); Assert.AreEqual(mv0_lat, mv0.Latest); Assert.AreNotEqual(mv0.Latest, mv1.Latest); }