1 /*
2  * Copyright (c) 2012-2021, The OSKAR Developers.
3  * See the LICENSE file at the top-level directory of this distribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
8 #include "math/oskar_find_closest_match.h"
9 #include "mem/oskar_mem.h"
10 #include "utility/oskar_get_error_string.h"
11 
TEST(find_closest_match,test)12 TEST(find_closest_match, test)
13 {
14     int i = 0, size = 10, status = 0;
15     int type = OSKAR_DOUBLE, location = OSKAR_CPU;
16     double start = 0.0, inc = 0.3, value = 0.0, *values_ = 0;
17     oskar_Mem* values = 0;
18 
19     // Create array and fill with values.
20     values = oskar_mem_create(type, location, size, &status);
21     values_ = oskar_mem_double(values, &status);
22     for (i = 0; i < size; ++i)
23     {
24         values_[i] = start + inc * i;
25     }
26 
27     //  0    1    2    3    4    5    6    7    8    9
28     // 0.0  0.3  0.6  0.9  1.2  1.5  1.8  2.1  2.4  2.7
29 
30     value = 0.7;
31     i = oskar_find_closest_match(value, values, &status);
32     ASSERT_EQ(0, status) << oskar_get_error_string(status);
33     EXPECT_EQ(2, i);
34 
35     value = 0.749999;
36     i = oskar_find_closest_match(value, values, &status);
37     ASSERT_EQ(0, status) << oskar_get_error_string(status);
38     EXPECT_EQ(2, i);
39 
40     value = 0.75;
41     i = oskar_find_closest_match(value, values, &status);
42     ASSERT_EQ(0, status) << oskar_get_error_string(status);
43     EXPECT_EQ(3, i);
44 
45     value = 0.750001;
46     i = oskar_find_closest_match(value, values, &status);
47     ASSERT_EQ(0, status) << oskar_get_error_string(status);
48     EXPECT_EQ(3, i);
49 
50     value = 100;
51     i = oskar_find_closest_match(value, values, &status);
52     ASSERT_EQ(0, status) << oskar_get_error_string(status);
53     EXPECT_EQ(9, i);
54 
55     value = -100;
56     i = oskar_find_closest_match(value, values, &status);
57     ASSERT_EQ(0, status) << oskar_get_error_string(status);
58     EXPECT_EQ(0, i);
59 
60     value = 0.3;
61     i = oskar_find_closest_match(value, values, &status);
62     ASSERT_EQ(0, status) << oskar_get_error_string(status);
63     EXPECT_EQ(1, i);
64 
65     // Free memory.
66     oskar_mem_free(values, &status);
67     ASSERT_EQ(0, status) << oskar_get_error_string(status);
68 }
69