summaryrefslogtreecommitdiff
path: root/Homework/cs3460/typeahead/TestWordTree.cpp
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
commit6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch)
treeed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs3460/typeahead/TestWordTree.cpp
downloadmisc-undergrad-main.tar.gz
misc-undergrad-main.zip
Diffstat (limited to 'Homework/cs3460/typeahead/TestWordTree.cpp')
-rw-r--r--Homework/cs3460/typeahead/TestWordTree.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/Homework/cs3460/typeahead/TestWordTree.cpp b/Homework/cs3460/typeahead/TestWordTree.cpp
new file mode 100644
index 0000000..4025230
--- /dev/null
+++ b/Homework/cs3460/typeahead/TestWordTree.cpp
@@ -0,0 +1,158 @@
+#include "WordTree.hpp"
+
+#include "gtest/gtest.h"
+#include <algorithm>
+int main(int argc, char* argv[])
+{
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+TEST(WordTree_Add, CanAddArbitraryValues)
+{
+ WordTree wordTree;
+ wordTree.add("what");
+ wordTree.add("apple");
+ wordTree.add("hello");
+ ASSERT_EQ(wordTree.size(), 3);
+ ASSERT_EQ(wordTree.find("what"), true);
+ ASSERT_EQ(wordTree.find("apple"), true);
+ ASSERT_EQ(wordTree.find("hello"), true);
+}
+TEST(WordTree_Add, DoesNotAddEmptyStrings)
+{
+ WordTree wordTree;
+ wordTree.add("");
+ ASSERT_EQ(wordTree.size(), 0);
+}
+TEST(WordTree_Add, CanAddDuplicateValues)
+{
+ WordTree wordTree;
+ wordTree.add("apple");
+ wordTree.add("apple");
+ ASSERT_EQ(wordTree.size(), 1);
+ ASSERT_EQ(wordTree.find("apple"), true);
+}
+TEST(WordTree_Find, CanFindWithNoWordsInTree)
+{
+ WordTree wordTree;
+ ASSERT_FALSE(wordTree.find("hello"));
+}
+TEST(WordTree_Find, FindEmptyStringIsFalse)
+{
+ WordTree wordTree;
+ ASSERT_FALSE(wordTree.find(""));
+ wordTree.add("abc");
+ ASSERT_FALSE(wordTree.find(""));
+}
+TEST(WordTree_Find, CanFindWordWithUniquePrefix)
+{
+ WordTree wordTree;
+ wordTree.add("what");
+ wordTree.add("how");
+ wordTree.add("nowhere");
+ ASSERT_TRUE(wordTree.find("what"));
+ ASSERT_TRUE(wordTree.find("how"));
+ ASSERT_TRUE(wordTree.find("nowhere"));
+ ASSERT_FALSE(wordTree.find("unknown"));
+ ASSERT_FALSE(wordTree.find("wh"));
+ ASSERT_FALSE(wordTree.find("wha"));
+}
+TEST(WordTree_Find, CanFindWordWithCommonPrefix)
+{
+ WordTree wordTree;
+ wordTree.add("what");
+ wordTree.add("who");
+ wordTree.add("when");
+ wordTree.add("where");
+ wordTree.add("why");
+ ASSERT_TRUE(wordTree.find("what"));
+ ASSERT_TRUE(wordTree.find("who"));
+ ASSERT_TRUE(wordTree.find("when"));
+ ASSERT_TRUE(wordTree.find("where"));
+ ASSERT_TRUE(wordTree.find("why"));
+ ASSERT_FALSE(wordTree.find("wh"));
+ ASSERT_FALSE(wordTree.find("w"));
+ ASSERT_FALSE(wordTree.find("whosoever"));
+}
+TEST(WordTree_Predict, CanPredictWithNoWordsInTree)
+{
+ WordTree wordTree;
+ ASSERT_EQ(0, wordTree.predict("hello", 1).size());
+}
+TEST(WordTree_Predict, CanPredictEmptyString)
+{
+ WordTree wordTree;
+ wordTree.add("hello");
+ ASSERT_EQ(0, wordTree.predict("", 1).size());
+}
+TEST(WordTree_Predict, CanPredictWithSingleLetter)
+{
+ WordTree wordTree;
+ wordTree.add("zoo");
+ wordTree.add("acknowledges");
+ wordTree.add("acknowledging");
+ wordTree.add("acorn");
+ wordTree.add("acorns");
+ wordTree.add("acoustic");
+ wordTree.add("zebras");
+ const auto predictions = wordTree.predict("a", 5);
+ EXPECT_EQ(5, predictions.size());
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acknowledges"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acknowledging"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acorn"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acorns"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acoustic"));
+}
+TEST(WordTree_Predict, CanPredictWithArbitraryPrefix)
+{
+ WordTree wordTree;
+ wordTree.add("zoo");
+ wordTree.add("acknowledges");
+ wordTree.add("acknowledging");
+ wordTree.add("acorn");
+ wordTree.add("acorns");
+ wordTree.add("acoustic");
+ wordTree.add("bounce");
+ wordTree.add("bound");
+ wordTree.add("boundaries");
+ wordTree.add("boundary");
+ wordTree.add("zebras");
+ const auto predictions = wordTree.predict("aco", 3);
+ EXPECT_EQ(3, predictions.size());
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acorn"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acorns"));
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acoustic"));
+}
+TEST(WordTree_Predict, DoesNotIncludePrefixInPrediction)
+{
+ WordTree wordTree;
+ wordTree.add("acknowledging");
+ wordTree.add("acorn");
+ wordTree.add("acorns");
+ wordTree.add("acoustic");
+ const auto predictions = wordTree.predict("acorn", 2);
+ EXPECT_EQ(1, predictions.size());
+ EXPECT_NE(end(predictions), std::find(begin(predictions), end(predictions),
+ "acorns"));
+}
+TEST(WordTree_Predict, DoesLimitPredicitionCount)
+{
+ WordTree wordTree;
+ wordTree.add("acknowledges");
+ wordTree.add("acknowledging");
+ wordTree.add("acorn");
+ wordTree.add("acorns");
+ wordTree.add("acoustic");
+ ASSERT_EQ(3, wordTree.predict("ac", 3).size());
+ ASSERT_EQ(1, wordTree.predict("ac", 1).size());
+ ASSERT_EQ(2, wordTree.predict("aco", 2).size());
+ ASSERT_EQ(5, wordTree.predict("a", 10).size());
+} \ No newline at end of file