diff --git a/ImGuiFileDialog b/ImGuiFileDialog index 2cdfd92..010cdea 160000 --- a/ImGuiFileDialog +++ b/ImGuiFileDialog @@ -1 +1 @@ -Subproject commit 2cdfd929fd7c9f406f25e90bc37f6641f7144292 +Subproject commit 010cdead252cc84453e896998c69f991e14ecc6f diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 950b451..557ec0f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -167,15 +167,15 @@ SetTest(Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_1) SetTest(Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_2) SetTest(Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_3) -## Test_IGFD_Utils -- Natural Sorting related -SetTest(Test_IGFD_Utils_IsAValidCharForADigit_0) - +## Test_IGFD_Utils -- Natural Sorting related : ExtractNumFromStringAtPos SetTest(Test_IGFD_Utils_ExtractNumFromStringAtPos_0) SetTest(Test_IGFD_Utils_ExtractNumFromStringAtPos_1) SetTest(Test_IGFD_Utils_ExtractNumFromStringAtPos_2) +## Test_IGFD_Utils -- Natural Sorting related : NaturalCompare SetTest(Test_IGFD_Utils_NaturalCompare_0) SetTest(Test_IGFD_Utils_NaturalCompare_1) SetTest(Test_IGFD_Utils_NaturalCompare_2) SetTest(Test_IGFD_Utils_NaturalCompare_3) SetTest(Test_IGFD_Utils_NaturalCompare_4) +SetTest(Test_IGFD_Utils_NaturalCompare_5) diff --git a/tests/ImGuiFileDialog/Test_Utils.cpp b/tests/ImGuiFileDialog/Test_Utils.cpp index ded9918..59a3ec9 100644 --- a/tests/ImGuiFileDialog/Test_Utils.cpp +++ b/tests/ImGuiFileDialog/Test_Utils.cpp @@ -173,37 +173,6 @@ bool Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_3() { //// Natural Sorting related /////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// -bool Test_IGFD_Utils_IsAValidCharForADigit_0() { - // valids - if (!IGFD::Utils::M_IsAValidCharForADigit('-')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('+')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('.')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('e')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('E')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('x')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('X')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('p')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('P')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('0')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('1')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('2')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('3')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('4')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('5')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('6')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('7')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('8')) return false; - if (!IGFD::Utils::M_IsAValidCharForADigit('9')) return false; - // some of invalids - if (IGFD::Utils::M_IsAValidCharForADigit('A')) return false; - if (IGFD::Utils::M_IsAValidCharForADigit('z')) return false; - if (IGFD::Utils::M_IsAValidCharForADigit('r')) return false; - if (IGFD::Utils::M_IsAValidCharForADigit('f')) return false; - if (IGFD::Utils::M_IsAValidCharForADigit('g')) return false; - if (IGFD::Utils::M_IsAValidCharForADigit('$')) return false; - return true; -} - // invalids numbers bool Test_IGFD_Utils_ExtractNumFromStringAtPos_0() { double n = 0.0; @@ -237,6 +206,13 @@ bool Test_IGFD_Utils_ExtractNumFromStringAtPos_1() { if (!IGFD::Utils::M_ExtractNumFromStringAtPos("-2.5", p = 0, n)) return false; if (!IGFD::Utils::M_ExtractNumFromStringAtPos("+2.5", p = 0, n)) return false; if (!IGFD::Utils::M_ExtractNumFromStringAtPos("1e-5", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("1e", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("1e-", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("1p", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("1p-", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("0x", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("0xABCDEF", p = 0, n)) return false; + if (IGFD::Utils::M_ExtractNumFromStringAtPos("0xabcdef", p = 0, n)) return false; if (!IGFD::Utils::M_ExtractNumFromStringAtPos("1E32.5", p = 0, n)) return false; if (!IGFD::Utils::M_ExtractNumFromStringAtPos("0x14", p = 0, n)) return false; if (!IGFD::Utils::M_ExtractNumFromStringAtPos("0X14", p = 0, n)) return false; @@ -491,7 +467,7 @@ bool Test_IGFD_Utils_NaturalCompare_3() { // natural sort : a crash occured is std::sort where a is filedialog_1 and b is filedialog bool Test_IGFD_Utils_NaturalCompare_4() { - static constexpr size_t s_count_items = 16U; + static constexpr size_t s_count_items = 5U; std::array bad_sort = // { "filed", // @@ -523,6 +499,56 @@ bool Test_IGFD_Utils_NaturalCompare_4() { return true; }; +// natural sort : not good sort in descending but ok ins ascending +bool Test_IGFD_Utils_NaturalCompare_5() { + static constexpr size_t s_count_items = 3U; + std::array bad_sort = // + { + "test2.txt", // + "test1.txt", // + "test11.txt", // + }; + + // ASCENDING + std::sort(bad_sort.begin(), bad_sort.end(), // + [](const std::string& a, const std::string& b) -> bool { // + return IGFD::Utils::NaturalCompare(a, b, true, false); + }); + + std::array good_sort_asc = // + { + "test1.txt", // + "test2.txt", // + "test11.txt", // + }; + + for (size_t idx = 0; idx < s_count_items; ++idx) { + if (good_sort_asc.at(idx) != bad_sort.at(idx)) { + return false; + } + } + + // DESCENDING + std::sort(bad_sort.begin(), bad_sort.end(), // + [](const std::string& a, const std::string& b) -> bool { // + return IGFD::Utils::NaturalCompare(a, b, true, true); + }); + + std::array good_sort_desc = // + { + "test11.txt", // + "test2.txt", // + "test1.txt", // + }; + + for (size_t idx = 0; idx < s_count_items; ++idx) { + if (good_sort_desc.at(idx) != bad_sort.at(idx)) { + return false; + } + } + return true; +}; + //////////////////////////////////////////////////////////////////////////// //// ENTRY POINT /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// @@ -550,8 +576,7 @@ bool Test_Utils(const std::string& vTest) { else IfTestExist(Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_2); else IfTestExist(Test_IGFD_Utils_SplitStringToVector_delimiter_std_string_3); - IfTestExist(Test_IGFD_Utils_IsAValidCharForADigit_0); - else IfTestExist(Test_IGFD_Utils_ExtractNumFromStringAtPos_0); + IfTestExist(Test_IGFD_Utils_ExtractNumFromStringAtPos_0); else IfTestExist(Test_IGFD_Utils_ExtractNumFromStringAtPos_1); else IfTestExist(Test_IGFD_Utils_ExtractNumFromStringAtPos_2); else IfTestExist(Test_IGFD_Utils_NaturalCompare_0); @@ -559,6 +584,7 @@ bool Test_Utils(const std::string& vTest) { else IfTestExist(Test_IGFD_Utils_NaturalCompare_2); else IfTestExist(Test_IGFD_Utils_NaturalCompare_3); else IfTestExist(Test_IGFD_Utils_NaturalCompare_4); + else IfTestExist(Test_IGFD_Utils_NaturalCompare_5); assert(0); diff --git a/tests/main.cpp b/tests/main.cpp index af5b6de..0fffd80 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -29,7 +29,7 @@ int main(int argc, char** argv) { return Test_ImGuiFileDialog(argv[1]) ? 0 : 1; } - return Test_ImGuiFileDialog("Test_IGFD_Utils_NaturalCompare_4") ? 0 : 1; + return Test_ImGuiFileDialog("Test_IGFD_Utils_NaturalCompare_5") ? 0 : 1; return 0; } \ No newline at end of file