#include "unordered_containers.hpp" #include #include #include TEST(UnorderedContainers, FirstUnique) { EXPECT_EQ(stl_containers::first_unique({"a", "b", "a", "c"}), "b"); } TEST(UnorderedContainers, HasDuplicate) { EXPECT_TRUE(stl_containers::has_duplicate({1, 2, 2})); EXPECT_FALSE(stl_containers::has_duplicate({1, 2, 3})); } TEST(UnorderedContainers, GroupAnagramsBasic) { auto result = stl_containers::group_anagrams({"eat", "tea", "tan", "ate", "nat", "bat"}); // Sort each group for deterministic comparison for (auto &group: result | std::views::values) { std::ranges::sort(group); } ASSERT_EQ(result.size(), 3); EXPECT_EQ(result["aet"], (std::vector{"ate", "eat", "tea"})); EXPECT_EQ(result["ant"], (std::vector{"nat", "tan"})); EXPECT_EQ(result["abt"], (std::vector{"bat"})); } TEST(UnorderedContainers, GroupAnagramsEmpty) { auto result = stl_containers::group_anagrams({}); EXPECT_TRUE(result.empty()); } TEST(UnorderedContainers, GroupAnagramsSingleWord) { auto result = stl_containers::group_anagrams({"hello"}); ASSERT_EQ(result.size(), 1); EXPECT_EQ(result["ehllo"], (std::vector{"hello"})); } TEST(UnorderedContainers, GroupAnagramsNoAnagrams) { auto result = stl_containers::group_anagrams({"abc", "def", "ghi"}); ASSERT_EQ(result.size(), 3); EXPECT_EQ(result["abc"].size(), 1); EXPECT_EQ(result["def"].size(), 1); EXPECT_EQ(result["ghi"].size(), 1); } TEST(UnorderedContainers, GroupAnagramsAllSame) { auto result = stl_containers::group_anagrams({"abc", "bca", "cab"}); ASSERT_EQ(result.size(), 1); auto& group = result["abc"]; std::ranges::sort(group); EXPECT_EQ(group, (std::vector{"abc", "bca", "cab"})); }