From b1aea90f00a4bf65253946b9f1017b6c9804535a Mon Sep 17 00:00:00 2001 From: Haidong Ji Date: Sat, 16 Mar 2019 21:52:16 -0500 Subject: Rabin-Karp string search done! Fun exercise. Some takeaways: 1. Smallest test case is easy to walk through and verify the logic, indexing, and such is correct; 2. Persist, don't give up, take it step by step, and you'll reach the goal! Hooray! --- src/test/HashChainsTest.java | 1 + src/test/HashSubstringTest.java | 52 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/test/HashSubstringTest.java (limited to 'src/test') diff --git a/src/test/HashChainsTest.java b/src/test/HashChainsTest.java index 9a7f192..57255fc 100644 --- a/src/test/HashChainsTest.java +++ b/src/test/HashChainsTest.java @@ -15,5 +15,6 @@ class HashChainsTest { hc.bucketCount = 3; assertEquals(1, hc.hashFunc("add")); assertEquals(1, hc.hashFunc("help")); + assertEquals(2, hc.hashFunc("del")); } } \ No newline at end of file diff --git a/src/test/HashSubstringTest.java b/src/test/HashSubstringTest.java new file mode 100644 index 0000000..854b329 --- /dev/null +++ b/src/test/HashSubstringTest.java @@ -0,0 +1,52 @@ +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class HashSubstringTest { + @Test + void test() { + HashSubstring.Data data = new HashSubstring.Data("aba", "abacaba"); + assertEquals(2, HashSubstring.getOccurrences(data).size()); + assertEquals(0, HashSubstring.getOccurrences(data).get(0)); + assertEquals(4, HashSubstring.getOccurrences(data).get(1)); + + List postions = HashSubstring.rabinKarp("a", "ab"); + assertEquals(1, postions.size()); + assertEquals(0, postions.get(0)); + + postions = HashSubstring.rabinKarp("a", "ba"); + assertEquals(1, postions.size()); + assertEquals(1, postions.get(0)); + + postions = HashSubstring.rabinKarp("aba", "abacaba"); + assertEquals(2, postions.size()); + assertEquals(0, postions.get(0)); + assertEquals(4, postions.get(1)); + } + + @Test + void test1() { + HashSubstring.Data data = new HashSubstring.Data("Test", "testTesttesT"); + assertEquals(1, HashSubstring.getOccurrences(data).size()); + assertEquals(4, HashSubstring.getOccurrences(data).get(0)); + List postions = HashSubstring.rabinKarp("Test", "testTesttesT"); + assertEquals(1, postions.size()); + assertEquals(4, postions.get(0)); + } + + @Test + void test2() { + HashSubstring.Data data = new HashSubstring.Data("aaaaa", "baaaaaaa"); + assertEquals(3, HashSubstring.getOccurrences(data).size()); + assertEquals(1, HashSubstring.getOccurrences(data).get(0)); + assertEquals(2, HashSubstring.getOccurrences(data).get(1)); + assertEquals(3, HashSubstring.getOccurrences(data).get(2)); + List positions = HashSubstring.rabinKarp("aaaaa", "baaaaaaa"); + assertEquals(3, positions.size()); + assertEquals(1, positions.get(0)); + assertEquals(2, positions.get(1)); + assertEquals(3, positions.get(2)); + } +} \ No newline at end of file -- cgit v1.2.3