public void ArrayHashComputerHashTest() { var test = "abcdeabc"; var hashComputer = ArrayHashComputer <char> .FromString(test); Assert.AreEqual(hashComputer.Hash(0, 2), hashComputer.Hash(5, 7)); for (int i = 1; i < 5; ++i) { Assert.AreNotEqual(hashComputer.Hash(0, 2), hashComputer.Hash(i, i + 2)); } for (int i = 0; i < test.Length; ++i) { for (int j = 0; j < test.Length; ++j) { if (test[i] == test[j]) { Assert.AreEqual(hashComputer.Hash(i, i), hashComputer.Hash(j, j)); } else { Assert.AreNotEqual(hashComputer.Hash(i, i), hashComputer.Hash(j, j)); } } } }
public void DistinctSubArrayCountTest() { var hashA = ArrayHashComputer <char> .FromString("abc"); Assert.AreEqual(6, hashA.DistinctSubArrayCount()); hashA = ArrayHashComputer <char> .FromString("aba"); Assert.AreEqual(5, hashA.DistinctSubArrayCount()); }
public void AllIndexesOfPatternTest() { var hashA = ArrayHashComputer <char> .FromString("abcdabca"); Assert.IsTrue(new[] { 0 }.SequenceEqual(hashA.AllIndexesOfPattern("abcdabca".ToList()))); Assert.IsTrue(new [] { 0, 4 }.SequenceEqual(hashA.AllIndexesOfPattern("ab".ToList()))); Assert.IsTrue(new [] { 0, 4, 7 }.SequenceEqual(hashA.AllIndexesOfPattern("a".ToList()))); Assert.IsTrue(new int[] {}.SequenceEqual(hashA.AllIndexesOfPattern("f".ToList()))); }
public void RecomputeHashTest(string str) { var hashA = ArrayHashComputer <char> .FromString(str); for (int i = 0; i < str.Length; ++i) { for (int j = i; j < str.Length; ++j) { var subString = str.Substring(i, j - i + 1); Assert.AreEqual(hashA.RecomputeHash(subString.ToList()), hashA.Hash(i, j)); } } }
public void FirstIndexOfSameSubArrayWithLengthTest() { var hashA = ArrayHashComputer <char> .FromString("abcdeabc"); var hashB = ArrayHashComputer <char> .FromString("abcdeabc"); Assert.AreEqual(0, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 0)); Assert.AreEqual(0, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 8)); Assert.AreEqual(-1, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 9)); hashA = ArrayHashComputer <char> .FromString("123456"); hashB = ArrayHashComputer <char> .FromString("456789"); Assert.AreEqual(0, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 0)); Assert.AreEqual(3, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 1)); Assert.AreEqual(3, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 2)); Assert.AreEqual(3, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 3)); Assert.AreEqual(-1, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 4)); Assert.AreEqual(0, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 0)); Assert.AreEqual(0, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 1)); Assert.AreEqual(0, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 2)); Assert.AreEqual(0, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 3)); Assert.AreEqual(-1, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 4)); hashA = ArrayHashComputer <char> .FromString("123"); hashB = ArrayHashComputer <char> .FromString("456"); Assert.AreEqual(0, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 0)); Assert.AreEqual(-1, hashA.FirstIndexOfSameSubArrayWithLength(hashB, 1)); Assert.AreEqual(-1, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 1)); Assert.AreEqual(-1, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 2)); Assert.AreEqual(-1, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 3)); Assert.AreEqual(-1, hashB.FirstIndexOfSameSubArrayWithLength(hashA, 4)); }