public void CompareTest() { var cc = new ChangingComparer(); for (int i = 0; i < 1000; i++) { var(_, t) = GetRandomDerivation(); var lineCount = random.Next(1, 10); List <Core.YinYang> r1 = new List <Core.YinYang>(); List <Core.YinYang> r2 = new List <Core.YinYang>(); List <int> c = new List <int>(); for (int j = 0; j < lineCount; j++) { var line = random.Next(0, 1); r1.Add((Core.YinYang)line); if (t.Contains(j)) { r2.Add((Core.YinYang)Convert.ToInt32(!Convert.ToBoolean(line))); c.Add(j); } else { r2.Add((Core.YinYang)line); } } Assert.IsTrue(cc.Compare(new Core.Painting(r2), new Core.Painting(r1)) .SequenceEqual(c)); Assert.IsFalse(cc.Compare(new Core.Painting(r1).ChangeLines(0), new Core.Painting(r2)) .SequenceEqual(c)); } }
/// <summary> /// 获取变爻的序号。 /// Get the indexes of the changed lines. /// </summary> /// <param name="obj"> /// 要判断的目标卦画。 /// The object painting to judge. /// </param> /// <param name="basis"> /// 作为判断基础的卦画。 /// The paintings to be used as the comparing basis. /// </param> /// <returns> /// 判断结果。 /// The result. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="basis"/> 或 <paramref name="obj"/> 是 <c>null</c> 。 /// <paramref name="basis"/> or <paramref name="obj"/> is <c>null</c>. /// </exception> public static int[] GetDifferentLinesBetween( this Core.Painting obj, Core.Painting basis) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } if (basis is null) { throw new ArgumentNullException(nameof(basis)); } return(changingComparer.Compare(basis, obj)); }