#include "version.hpp" #include "tap.hpp" /////////////////////////////////////////////////////////////////////////////// static const struct { const char *msg; const char *str; unsigned parts[4]; cruft::version::release_t release; } PARSE_TESTS[] = { { "parse 1 component", "1", { 1u }, cruft::version::PRODUCTION }, { "parse 2component", "1.2", { 1u, 2u }, cruft::version::PRODUCTION }, { "parse 3component", "1.2.3", { 1u, 2u, 3u }, cruft::version::PRODUCTION }, { "parse 4component", "1.2.3.4", { 1u, 2u, 3u, 4u }, cruft::version::PRODUCTION }, { "parse 2 component alpha", "9.5a", { 9u, 5u }, cruft::version::ALPHA }, { "parse 3 component beta", "8.2.5b", { 8u, 2u, 5u }, cruft::version::BETA }, /* { "1.4.1-p8", { 1, 4, 1 } }, { "4.2.0-r4", { 4, 2, 0 } }, { "1.4 RC1", { 1, 4 } } */ }; /////////////////////////////////////////////////////////////////////////////// static const struct { cruft::version a, b; bool eq, lt, gt; const char *msg; } CMP_TESTS[] = { { { 1u }, { 1u }, true, false, false, "v1 cmp v1" }, { { 1u }, { 1u, 0u }, true, false, false, "v1 cmp v1.0" }, { { 1u, 0u }, { 1u }, true, false, false, "v1.0 cmp v1" }, { { 1u, 1u }, { 1u }, false, false, true, "v1.1 cmp v1" }, { { 1u, }, { 1u, 1u }, false, true, false, "v1 cmp v1.1" }, }; //----------------------------------------------------------------------------- int main () { cruft::TAP::logger tap; for (const auto &t: PARSE_TESTS) { cruft::version v (t.str); bool parts = std::equal (v.begin (), v.end (), t.parts); bool release = v.release == t.release; tap.expect (parts && release, "%s", t.msg); } for (const auto &t: CMP_TESTS) { const bool eq = t.a == t.b; const bool lt = t.a < t.b; const bool gt = t.a > t.b; tap.expect (t.eq == eq, "%s: equality", t.msg); tap.expect (t.lt == lt, "%s: less-than", t.msg); tap.expect (t.gt == gt, "%s: greater-than", t.msg); } return tap.status (); }