1 // Copyright 2015, Tobias Hermann and the FunctionalPlus contributors. 2 // https://github.com/Dobiasd/FunctionalPlus 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #include <doctest/doctest.h> 8 #include <fplus/fplus.hpp> 9 #include <vector> 10 11 12 namespace { 13 typedef std::vector<int> IntVector; 14 IntVector xs = {1,2,2,3,2}; 15 } 16 17 TEST_CASE("extrapolate_test - elem_at_idx_or_nothing") 18 { 19 using namespace fplus; 20 REQUIRE_EQ(elem_at_idx_or_nothing(-4, xs), nothing<int>()); 21 REQUIRE_EQ(elem_at_idx_or_nothing(14, xs), nothing<int>()); 22 REQUIRE_EQ(elem_at_idx_or_nothing(3, xs), maybe<int>(3)); 23 } 24 25 TEST_CASE("extrapolate_test - elem_at_idx_or_constant") 26 { 27 using namespace fplus; 28 REQUIRE_EQ(elem_at_idx_or_constant(4, -4, xs), 4); 29 REQUIRE_EQ(elem_at_idx_or_constant(4, 14, xs), 4); 30 REQUIRE_EQ(elem_at_idx_or_constant(4, 3, xs), 3); 31 } 32 33 TEST_CASE("extrapolate_test - elem_at_idx_or_replicate") 34 { 35 using namespace fplus; 36 REQUIRE_EQ(elem_at_idx_or_replicate(-2, xs), 1); 37 REQUIRE_EQ(elem_at_idx_or_replicate(-1, xs), 1); 38 REQUIRE_EQ(elem_at_idx_or_replicate(0, xs), 1); 39 REQUIRE_EQ(elem_at_idx_or_replicate(4, xs), 2); 40 REQUIRE_EQ(elem_at_idx_or_replicate(5, xs), 2); 41 REQUIRE_EQ(elem_at_idx_or_replicate(6, xs), 2); 42 } 43 44 TEST_CASE("extrapolate_test - elem_at_idx_or_wrap") 45 { 46 using namespace fplus; 47 REQUIRE_EQ(elem_at_idx_or_wrap(-2, xs), 3); 48 REQUIRE_EQ(elem_at_idx_or_wrap(-1, xs), 2); 49 REQUIRE_EQ(elem_at_idx_or_wrap(0, xs), 1); 50 REQUIRE_EQ(elem_at_idx_or_wrap(4, xs), 2); 51 REQUIRE_EQ(elem_at_idx_or_wrap(5, xs), 1); 52 REQUIRE_EQ(elem_at_idx_or_wrap(6, xs), 2); 53 } 54 55 TEST_CASE("extrapolate_test - elem_at_idx_or_wrap") 56 { 57 using namespace fplus; 58 REQUIRE_EQ(elem_at_idx_or_wrap(-2, xs), 3); 59 REQUIRE_EQ(elem_at_idx_or_wrap(-1, xs), 2); 60 REQUIRE_EQ(elem_at_idx_or_wrap(0, xs), 1); 61 REQUIRE_EQ(elem_at_idx_or_wrap(4, xs), 2); 62 REQUIRE_EQ(elem_at_idx_or_wrap(5, xs), 1); 63 REQUIRE_EQ(elem_at_idx_or_wrap(6, xs), 2); 64 } 65 66 TEST_CASE("extrapolate_test - extrapolate_replicate") 67 { 68 using namespace fplus; 69 REQUIRE_EQ(extrapolate_replicate(2, 2, xs), IntVector({1,1,1,2,2,3,2,2,2})); 70 } 71 72 TEST_CASE("extrapolate_test - extrapolate_wrap") 73 { 74 using namespace fplus; 75 REQUIRE_EQ(extrapolate_wrap(2, 2, xs), IntVector({3,2,1,2,2,3,2,1,2})); 76 } 77