Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/test/function_test.cpp
blob: 94e615715da7deff3df4f98d6df1c7981b274c8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "StarStoredFunctions.hpp"

#include "gtest/gtest.h"

using namespace Star;

TEST(StoredFunctionTest, All) {
  List<pair<double, double>> values = {{0.0f, 0.0f}, {1.0f, 1.0f}, {2.0f, 4.0f}, {3.0f, 9.0f}, {4.0f, 16.0f}};
  ParametricFunction<double, double> function(values, InterpolationMode::Linear, BoundMode::Clamp);
  StoredFunction levelingFunction(function);

  EXPECT_LT(fabs(function.interpolate(2.5f) - 6.5f), 0.001f);

  auto result = levelingFunction.search(16.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 16.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 4.0f), 0.001f);

  result = levelingFunction.search(0.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 0.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 0.0f), 0.001f);

  result = levelingFunction.search(6.5f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 6.5f), 0.001f);
  EXPECT_LT(fabs(result.solution - 2.5f), 0.001f);

  List<pair<double, double>> swordsValues = {{0.0f, 0.0f}, {1.0f, 10.0f}, {100.0f, 500.0f}, {9999.0f, 9999999.0f}};
  ParametricFunction<double, double> swordsFunction(swordsValues, InterpolationMode::Linear, BoundMode::Clamp);
  StoredFunction swordsLevelingFunction(swordsFunction);

  result = swordsLevelingFunction.search(0.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 0.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 0.0f), 0.001f);

  result = swordsLevelingFunction.search(10.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 10.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 1.0f), 0.001f);

  result = swordsLevelingFunction.search(500.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 500.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 100.0f), 0.001f);

  result = swordsLevelingFunction.search(501.0f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 501.0f), 0.001f);
  EXPECT_LT(fabs(result.solution - 100.0f), 0.001f);

  result = swordsLevelingFunction.search(500.01f);
  EXPECT_TRUE(result.found);
  EXPECT_LT(fabs(result.value - 500.01f), 0.001f);
  EXPECT_LT(fabs(result.solution - 100.0f), 0.001f);
}