diff --git a/libs/algorithm/test/bogo_sort.cpp b/libs/algorithm/test/bogo_sort.cpp index 652fef8d..05b4d261 100644 --- a/libs/algorithm/test/bogo_sort.cpp +++ b/libs/algorithm/test/bogo_sort.cpp @@ -19,6 +19,7 @@ namespace testspr { static void algorithm_bogo_sort_test() { using namespace sprout; +#if !defined(__clang__) || !(__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)) { SPROUT_STATIC_CONSTEXPR auto arr1 = array{{5, 1, 4, 2, 3}}; @@ -133,6 +134,122 @@ namespace testspr { )); } } +#else + { + SPROUT_STATIC_CONSTEXPR auto arr1 = array{{1, 4, 2, 3}}; + + // ソート + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort( + arr1, + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED) + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{1, 2, 3, 4}} + )); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort( + arr1, + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED) + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{1, 2, 3, 4}} + )); + } + // ソート + // 範囲の切り出し + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort( + sprout::sub(arr1, 1, 3), + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED) + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sorted), + array{{1, 2, 4, 3}} + )); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort( + sprout::sub(arr1, 1, 3), + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED) + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sorted), + array{{1, 2, 4, 3}} + )); + } + } + { + SPROUT_STATIC_CONSTEXPR auto arr1 = array{{1, 4, 2, 3}}; + + // ソート + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort( + arr1, + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED), + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{1, 2, 3, 4}} + )); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort( + arr1, + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED), + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{1, 2, 3, 4}} + )); + } + // ソート + // 範囲の切り出し + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort( + sprout::sub(arr1, 1, 3), + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED), + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sorted), + array{{1, 2, 4, 3}} + )); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort( + sprout::sub(arr1, 1, 3), + sprout::random::default_random_engine(SPROUT_UNIQUE_SEED), + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sorted, + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sorted), + array{{1, 2, 4, 3}} + )); + } + } +#endif } } // namespace testspr diff --git a/libs/algorithm/test/bogo_sort_result.cpp b/libs/algorithm/test/bogo_sort_result.cpp index 929a115e..83d35938 100644 --- a/libs/algorithm/test/bogo_sort_result.cpp +++ b/libs/algorithm/test/bogo_sort_result.cpp @@ -19,6 +19,7 @@ namespace testspr { static void algorithm_bogo_sort_result_test() { using namespace sprout; +#if !defined(__clang__) || !(__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)) { SPROUT_STATIC_CONSTEXPR auto arr1 = array{{5, 1, 4, 2, 3}}; SPROUT_STATIC_CONSTEXPR auto g = sprout::random::default_random_engine(SPROUT_UNIQUE_SEED); @@ -175,6 +176,164 @@ namespace testspr { TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); } } +#else + { + SPROUT_STATIC_CONSTEXPR auto arr1 = array{{1, 4, 2, 3}}; + SPROUT_STATIC_CONSTEXPR auto g = sprout::random::default_random_engine(SPROUT_UNIQUE_SEED); + + // ソート + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort_result( + arr1, + g + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{1, 2, 3, 4}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort_result( + arr1, + g + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{1, 2, 3, 4}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + // ソート + // 範囲の切り出し + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort_result( + sprout::sub(arr1, 1, 3), + g + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sprout::get<0>(sorted)), + array{{1, 2, 4, 3}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort_result( + sprout::sub(arr1, 1, 3), + g + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sprout::get<0>(sorted)), + array{{1, 2, 4, 3}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + } + { + SPROUT_STATIC_CONSTEXPR auto arr1 = array{{1, 4, 2, 3}}; + SPROUT_STATIC_CONSTEXPR auto g = sprout::random::default_random_engine(SPROUT_UNIQUE_SEED); + + // ソート + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort_result( + arr1, + g, + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{1, 2, 3, 4}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort_result( + arr1, + g, + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{1, 2, 3, 4}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + // ソート + // 範囲の切り出し + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::bogo_sort_result( + sprout::sub(arr1, 1, 3), + g, + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sprout::get<0>(sorted)), + array{{1, 2, 4, 3}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + { + SPROUT_STATIC_CONSTEXPR auto sorted = sprout::fit::bogo_sort_result( + sprout::sub(arr1, 1, 3), + g, + testspr::less() + ); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get<0>(sorted), + array{{2, 4}} + )); + TESTSPR_BOTH_ASSERT(testspr::equal( + sprout::get_internal(sprout::get<0>(sorted)), + array{{1, 2, 4, 3}} + )); + SPROUT_STATIC_CONSTEXPR auto sorted2 = sprout::bogo_sort_result( + sprout::get<0>(sorted), + sprout::get<1>(sorted) + ); + TESTSPR_BOTH_ASSERT(sprout::get<1>(sorted) == sprout::get<1>(sorted2)); + } + } +#endif } } // namespace testspr diff --git a/tools/testspr/test.sh b/tools/testspr/test.sh index 270567c0..71f3d7be 100755 --- a/tools/testspr/test.sh +++ b/tools/testspr/test.sh @@ -24,6 +24,7 @@ declare -a common_options=() declare -a version_options=() declare -A version_specific_options=( [clang-3.3]='-ftemplate-depth=512' + [clang-3.4]='-ftemplate-depth=512' ) test_cpp=$(cd $(dirname $0); pwd)/test.cpp test_py=$(cd $(dirname $0); pwd)/test.py