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);
}