summaryrefslogtreecommitdiffstats
path: root/tests/test_str_set.cpp
blob: cae019d97ed1aa793645d077b7ac3327de89ec08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <frozen/string.h>
#include <frozen/set.h>
#include <iostream>
#include <set>
#include <array>

#include "bench.hpp"
#include "catch.hpp"

TEST_CASE("tripleton int frozen ordered set", "[set]") {
  constexpr frozen::set<frozen::string, 3> ze_set{"1", "2", "3"};

  constexpr auto empty = ze_set.empty();
  REQUIRE(!empty);

  constexpr auto size = ze_set.size();
  REQUIRE(size == 3);

  constexpr auto max_size = ze_set.max_size();
  REQUIRE(max_size == 3);

  constexpr auto nocount = ze_set.count("4");
  REQUIRE(nocount == 0);

  constexpr auto count = ze_set.count("1");
  REQUIRE(count == 1);

  auto notfound = ze_set.find("4");
  REQUIRE(notfound == ze_set.end());

  auto found = ze_set.find("1");
  REQUIRE(found == ze_set.begin());

  auto range = ze_set.equal_range("1");
  REQUIRE(std::get<0>(range) != ze_set.end());

  auto begin = ze_set.begin(), end = ze_set.end();
  REQUIRE(begin != end);

  auto cbegin = ze_set.cbegin(), cend = ze_set.cend();
  REQUIRE(cbegin != cend);

  std::for_each(ze_set.begin(), ze_set.end(), [](frozen::string const &) {});
}

TEST_CASE("frozen::set<str> <> std::set",
          "[set]") {
#define INIT_SEQ                                                               \
  "19", "1", "2", "4", "5", "6", "7", "8", "9", "10",      \
      "11", "111", "1112", "1115", "1118", "1110", "1977",       \
      "177", "277", "477", "577", "677", "777", "877", "977",  \
      "1077", "1177", "11177", "111277", "111577", "111877",       \
      "111077", "1999", "199", "299", "499", "599", "699",       \
      "799", "899", "999", "1099", "1199", "11199", "111299",    \
      "111599", "111899", "111099", "197799", "17799", "27799",    \
      "47799", "57799", "67799", "77799", "87799", "97799",        \
      "107799", "117799", "1117799", "11127799", "11157799",         \
      "11187799", "11107799", "1988", "188", "288", "488",         \
      "588", "688", "788", "888", "988", "1088", "1188",         \
      "11188", "111288", "111588", "111888", "111088", "197788",   \
      "17788", "27788", "47788", "57788", "67788", "77788",        \
      "87788", "97788", "107788", "117788", "1117788", "11127788", \
      "11157788", "11187788", "11107788", "199988", "19988",         \
      "29988", "49988", "59988", "69988", "79988", "89988",        \
      "99988", "109988", "119988", "1119988", "11129988",            \
      "11159988", "11189988", "11109988", "19779988", "1779988",     \
      "2779988", "4779988", "5779988", "6779988", "7779988",         \
      "8779988", "9779988", "10779988", "11779988", "111779988",     \
      "1112779988", "1115779988", "1118779988", "1110779988"

  const std::set<frozen::string> std_set = {INIT_SEQ};
  constexpr frozen::set<frozen::string, 128> frozen_set = {INIT_SEQ};
  SECTION("checking size and content") {
    REQUIRE(std_set.size() == frozen_set.size());
    for (auto v : std_set)
      REQUIRE(frozen_set.count(v));

    for (auto v : frozen_set)
      REQUIRE(std_set.count(v));
  }

}