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