trie.t.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // trie.t.h
  3. // trie
  4. //
  5. // Created by Sam Jaffe on 6/16/17.
  6. //
  7. #pragma once
  8. #include <cxxtest/TestSuite.h>
  9. #include "trie.hpp"
  10. class trie_TestSuite : public CxxTest::TestSuite {
  11. private:
  12. trie<int, int> data;
  13. void setUp() override {
  14. data.clear();
  15. data = -1;
  16. data[0] = 5;
  17. data[1] = 2;
  18. data[{0, 1}] = 4;
  19. }
  20. public:
  21. void testIterationIsPreOrder() {
  22. auto it = data.cbegin();
  23. TS_ASSERT_EQUALS(*it, -1);
  24. TS_ASSERT_EQUALS(*++it, 5);
  25. TS_ASSERT_EQUALS(*++it, 4);
  26. TS_ASSERT_EQUALS(*++it, 2);
  27. TS_ASSERT_EQUALS(++it, data.cend());
  28. }
  29. void testPostIterationIsPostOrder() {
  30. auto it = trie<int, int>::const_post_iterator{&data};
  31. decltype(it) end{};
  32. TS_ASSERT_EQUALS(*it, -1);
  33. TS_ASSERT_EQUALS(*++it, 2);
  34. TS_ASSERT_EQUALS(*++it, 5);
  35. TS_ASSERT_EQUALS(*++it, 4);
  36. TS_ASSERT_EQUALS(++it, end);
  37. }
  38. void testReverseIterationIsInvDepthFirst() {
  39. auto it = data.crbegin();
  40. TS_ASSERT_EQUALS(*it, 2);
  41. TS_ASSERT_EQUALS(*++it, 4);
  42. TS_ASSERT_EQUALS(*++it, 5);
  43. TS_ASSERT_EQUALS(*++it, -1);
  44. TS_ASSERT_EQUALS(++it, data.crend());
  45. }
  46. void testCopyCtorIsDeepCopy() {
  47. trie<int, int> copy{data};
  48. TS_ASSERT_EQUALS(data, copy);
  49. copy[{0, 1}] = 3;
  50. TS_ASSERT_DIFFERS(data, copy);
  51. }
  52. };