Commit 759b269c authored by Ari Trachtenberg's avatar Ari Trachtenberg
Browse files

added variability for character size

parent b496aa7c
Loading
Loading
Loading
Loading
+89 −4
Original line number Diff line number Diff line
@@ -18,29 +18,100 @@ bool failExample(const char* testName, const string& msg, string expected, strin
    return false;
}

bool test_0() {
template <size_t N, typename = void>
struct has_sequence : std::false_type {};

template <size_t N>
struct has_sequence<N, std::void_t<
    decltype(sequence(std::declval<const std::vector<std::array<char,N>>&>()))
>> : std::true_type {};

bool test_0_5() {
  const char* T = "sequence 3a";

  {
    vector<array<char,7>> reads = {{
            {'A','B','C','D','E','F','G'}
      {'A','B','C','D','E'}
    }};

    string got = sequence(reads);
    string expected = "ABCDE";

    if (got != expected)
      warnExample(T, "single read", expected, got);
  }

  {
    vector<array<char,7>> read7 = {{
      {'A','B','C','D','E'},
      {'B','C','D','E','F'},
      {'C','D','E','F','G'}
    }};

    string got = sequence(read7);
    string expected = "ABCDEFG";

    if (got != expected)
      return failExample(T, "simple overlap chain", expected, got);
  }

  return true;
}
bool test_0_6() {
  const char* T = "sequence 3a";

  {
    vector<array<char,6>> reads = {{
      {'A','B','C','D','E','F'}
    }};

    string got = sequence(reads);
    string expected = "ABCDEF";

    if (got != expected)
      warnExample(T, "single read", expected, got);
  }

  {
    vector<array<char,7>> read7 = {{
      {'A','B','C','D','E','F'},
      {'B','C','D','E','F','G'},
      {'C','D','E','F','G','H'}
    }};

    string got = sequence(read7);
    string expected = "ABCDEFGH";

    if (got != expected)
      return failExample(T, "simple overlap chain", expected, got);
  }

  return true;
}

bool test_0_7() {
    const char* T = "sequence 3a";

    {
        vector<array<char,7>> reads = {{
            {'A','B','C','D','E','F','G'}
        }};

        string got = sequence(reads);
        string expected = "ABCDEFG";

        if (got != expected)
            warnExample(T, "single read", expected, got);
    }

    {
        vector<array<char,7>> read7 = {{
            {'A','B','C','D','E','F','G'},
            {'B','C','D','E','F','G','H'},
            {'C','D','E','F','G','H','I'}
        }};

        string got = sequence(reads);
        string got = sequence(read7);
        string expected = "ABCDEFGHI";

        if (got != expected)
@@ -50,8 +121,22 @@ bool test_0() {
    return true;
}

auto results_maker() {
  if constexpr (has_sequence<5>::value) {
    return std::array<bool,1>{ test_0_5() };
  } else if constexpr (has_sequence<6>::value) {
    return std::array<bool,1>{ test_0_6() };
  } else if constexpr (has_sequence<7>::value) {
    return std::array<bool,1>{ test_0_7() };
  } else {
    static_assert(has_sequence<5>::value || has_sequence<6>::value || has_sequence<7>::value,
                  "No supported sequence() overload found");
  }
}

int main() {
    bool results[] = { test_0() };

    bool results[] = results_maker();

    bool allPassed = true;
    for (size_t i = 0; i < std::size(results); i++) {