#include #include "tui/tui_helpers.hpp" #include #include TEST_CASE("ToLower") { CHECK(ToLower("ABC") == "abc"); CHECK(ToLower("aBc 123") == "abc 123"); CHECK(ToLower("") == ""); } TEST_CASE("LongestCommonPrefix") { CHECK(LongestCommonPrefix({}) == ""); CHECK(LongestCommonPrefix({"foo"}) == "foo"); CHECK(LongestCommonPrefix({"foo", "foobar", "foobaz"}) == "foo"); CHECK(LongestCommonPrefix({"abc", "xyz"}) == ""); CHECK(LongestCommonPrefix({"abc", "abc"}) == "abc"); } TEST_CASE("Tokenize splits on whitespace") { CHECK(Tokenize("").empty()); CHECK(Tokenize(" ").empty()); auto t = Tokenize("a b c"); CHECK(t == std::vector{"a", "b", "c"}); } TEST_CASE("Tokenize preserves quoted spaces") { auto t = Tokenize("load \"my mod\" /tmp/x mentor"); CHECK(t == std::vector{"load", "my mod", "/tmp/x", "mentor"}); } TEST_CASE("Tokenize handles tabs as separators") { auto t = Tokenize("a\tb\tc"); CHECK(t == std::vector{"a", "b", "c"}); } TEST_CASE("NaturalLess: numeric runs sort numerically") { CHECK(NaturalLess("J1", "J2")); CHECK(NaturalLess("J2", "J10")); CHECK(NaturalLess("J9", "J10")); CHECK(!NaturalLess("J10", "J2")); CHECK(!NaturalLess("J10", "J10")); } TEST_CASE("NaturalLess: case insensitive for letters") { CHECK(NaturalLess("abc", "ABD")); CHECK(!NaturalLess("ABD", "abc")); CHECK(!NaturalLess("abc", "ABC")); } TEST_CASE("NaturalLess: leading zeros tie-break") { CHECK(NaturalLess("J01", "J1")); CHECK(!NaturalLess("J1", "J01")); } TEST_CASE("NaturalLess: produces a sorted order over a connector-style list") { std::vector v = {"J22", "J1", "J10", "J2", "P100", "P21", "P2"}; std::sort(v.begin(), v.end(), NaturalLess); CHECK(v == std::vector{"J1", "J2", "J10", "J22", "P2", "P21", "P100"}); } TEST_CASE("NaturalLess: total order axioms") { // !(a < a) CHECK(!NaturalLess("foo", "foo")); CHECK(!NaturalLess("J10", "J10")); // a < b ⇒ !(b < a) CHECK(NaturalLess("J1", "J2")); CHECK(!NaturalLess("J2", "J1")); }