// // trie.t.h // trie // // Created by Sam Jaffe on 6/16/17. // #pragma once #include #include "trie.hpp" class trie_TestSuite : public CxxTest::TestSuite { private: trie data; void setUp() override { data.clear(); data = -1; data[0] = 5; data[1] = 2; data[{0, 1}] = 4; } public: void testIterationIsPreOrder() { auto it = data.cbegin(); TS_ASSERT_EQUALS(*it, -1); TS_ASSERT_EQUALS(*++it, 5); TS_ASSERT_EQUALS(*++it, 4); TS_ASSERT_EQUALS(*++it, 2); TS_ASSERT_EQUALS(++it, data.cend()); } void testPostIterationIsPostOrder() { auto it = trie::const_post_iterator{&data}; decltype(it) end{}; TS_ASSERT_EQUALS(*it, -1); TS_ASSERT_EQUALS(*++it, 2); TS_ASSERT_EQUALS(*++it, 5); TS_ASSERT_EQUALS(*++it, 4); TS_ASSERT_EQUALS(++it, end); } void testReverseIterationIsInvDepthFirst() { auto it = data.crbegin(); TS_ASSERT_EQUALS(*it, 2); TS_ASSERT_EQUALS(*++it, 4); TS_ASSERT_EQUALS(*++it, 5); TS_ASSERT_EQUALS(*++it, -1); TS_ASSERT_EQUALS(++it, data.crend()); } void testCopyCtorIsDeepCopy() { trie copy{data}; TS_ASSERT_EQUALS(data, copy); copy[{0, 1}] = 3; TS_ASSERT_DIFFERS(data, copy); } };