aboutsummaryrefslogtreecommitdiff
path: root/unittests/param_test.cpp
blob: 44ae4df06803f920e04a9480519550bedd31d353 (plain) (blame)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <systemlib/visibility.h>
#include <systemlib/param/param.h>

#include "gtest/gtest.h"

/*
 * These will be used in param.c if compiling for unit tests
 */
struct param_info_s	param_array[256];
struct param_info_s	*param_info_base;
struct param_info_s	*param_info_limit;

/*
 * Adds test parameters
 */
void _add_parameters()
{
	struct param_info_s test_1 = {
		"TEST_1",
		PARAM_TYPE_INT32
	};
	test_1.val.i = 2;

	struct param_info_s test_2 = {
		"TEST_2",
		PARAM_TYPE_INT32
	};
	test_2.val.i = 4;

	struct param_info_s rc_x = {
		"RC_X",
		PARAM_TYPE_INT32
	};
	rc_x.val.i = 8;

	struct param_info_s rc2_x = {
		"RC2_X",
		PARAM_TYPE_INT32
	};
	rc2_x.val.i = 16;

	param_array[0] = test_1;
	param_array[1] = test_2;
	param_array[2] = rc_x;
	param_array[3] = rc2_x;
	param_info_base = (struct param_info_s *) &param_array[0];
	param_info_limit = (struct param_info_s *) &param_array[4]; 	// needs to point at the end of the data,
	// therefore number of params + 1
}

void _assert_parameter_int_value(param_t param, int32_t expected)
{
	int32_t value;
	int result = param_get(param, &value);
	ASSERT_EQ(0, result) << printf("param_get (%i) did not return parameter\n", param);
	ASSERT_EQ(expected, value) << printf("value for param (%i) doesn't match default value\n", param);
}

void _set_all_int_parameters_to(int32_t value)
{
	param_set((param_t)0, &value);
	param_set((param_t)1, &value);
	param_set((param_t)2, &value);
	param_set((param_t)3, &value);

	_assert_parameter_int_value((param_t)0, value);
	_assert_parameter_int_value((param_t)1, value);
	_assert_parameter_int_value((param_t)2, value);
	_assert_parameter_int_value((param_t)3, value);
}

TEST(ParamTest, SimpleFind)
{
	_add_parameters();

	param_t param = param_find("TEST_2");
	ASSERT_NE(PARAM_INVALID, param) << "param_find did not find parameter";

	int32_t value;
	int result = param_get(param, &value);
	ASSERT_EQ(0, result) << "param_get did not return parameter";
	ASSERT_EQ(4, value) << "value of returned parameter does not match";
}

TEST(ParamTest, ResetAll)
{
	_add_parameters();
	_set_all_int_parameters_to(50);

	param_reset_all();

	_assert_parameter_int_value((param_t)0, 2);
	_assert_parameter_int_value((param_t)1, 4);
	_assert_parameter_int_value((param_t)2, 8);
	_assert_parameter_int_value((param_t)3, 16);
}

TEST(ParamTest, ResetAllExcludesOne)
{
	_add_parameters();
	_set_all_int_parameters_to(50);

	const char *excludes[] = {"RC_X"};
	param_reset_excludes(excludes, 1);

	_assert_parameter_int_value((param_t)0, 2);
	_assert_parameter_int_value((param_t)1, 4);
	_assert_parameter_int_value((param_t)2, 50);
	_assert_parameter_int_value((param_t)3, 16);
}

TEST(ParamTest, ResetAllExcludesTwo)
{
	_add_parameters();
	_set_all_int_parameters_to(50);

	const char *excludes[] = {"RC_X", "TEST_1"};
	param_reset_excludes(excludes, 2);

	_assert_parameter_int_value((param_t)0, 50);
	_assert_parameter_int_value((param_t)1, 4);
	_assert_parameter_int_value((param_t)2, 50);
	_assert_parameter_int_value((param_t)3, 16);
}

TEST(ParamTest, ResetAllExcludesBoundaryCheck)
{
	_add_parameters();
	_set_all_int_parameters_to(50);

	const char *excludes[] = {"RC_X", "TEST_1"};
	param_reset_excludes(excludes, 1);

	_assert_parameter_int_value((param_t)0, 2);
	_assert_parameter_int_value((param_t)1, 4);
	_assert_parameter_int_value((param_t)2, 50);
	_assert_parameter_int_value((param_t)3, 16);
}

TEST(ParamTest, ResetAllExcludesWildcard)
{
	_add_parameters();
	_set_all_int_parameters_to(50);

	const char *excludes[] = {"RC*"};
	param_reset_excludes(excludes, 1);

	_assert_parameter_int_value((param_t)0, 2);
	_assert_parameter_int_value((param_t)1, 4);
	_assert_parameter_int_value((param_t)2, 50);
	_assert_parameter_int_value((param_t)3, 50);
}