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