diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ce2e59..67efe0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,3 +40,4 @@ crap_test(signbittype) crap_test(subsatvalue) crap_test(trunctype) crap_test(upperboundtype) +crap_test(upperboundvalue) diff --git a/test/upperboundvaluetest.cpp b/test/upperboundvaluetest.cpp new file mode 100644 index 0000000..cd156fb --- /dev/null +++ b/test/upperboundvaluetest.cpp @@ -0,0 +1,42 @@ +#include "../include/crap/algorithm.d/upperboundfortype.h" + +#include +#include +#include +#include +#include + +#include "testutils.h" +#include "../include/crap/utility.d/valuelist.h" + +bool test_upperBoundValueTrivialTest() +{ + using valueTestType = unsigned int; + constexpr const static valueTestType Constrain = 42u; + constexpr const static valueTestType Subject = 7u; + static_assert(Subject < Constrain, "Subject should be smaller than Constrain so test may function."); + + //TODO: Make sequence random. + using testList1 = + crap :: valueList; + using testedFun = crap :: upperBoundForType< + valueTestType, + Subject, + lessConstrainedForType :: template type>; + using testResult_t = typename testList1 :: copy ; + constexpr const static auto testResult = testResult_t :: value; + static_assert(testResult < testList1 :: size + 1u, "Subject should be somewher!"); + static_assert(testList1 :: data()[testResult - 1u] == Subject, "Subject in wrong place"); + return true; +} + +int main() +{ + const bool results[] = { + test_upperBoundValueTrivialTest() + }; + return std :: accumulate(std :: begin(results), std :: end(results), true, std :: logical_and()) + ? EXIT_SUCCESS + : EXIT_FAILURE; +} +