libamxp  1.4.0
Patterns C Implementation
test_var_search.h File Reference
#include <amxc/amxc_macros.h>

Go to the source code of this file.

Functions

int test_var_search_setup (UNUSED void **state)
 
int test_var_search_teardown (UNUSED void **state)
 
void test_can_filter_values (UNUSED void **state)
 
void test_can_use_paths (UNUSED void **state)
 
void test_can_get_filtered_value (UNUSED void **state)
 
void test_get_filtered_value_fails_when_multiple_matches_found (UNUSED void **state)
 
void test_filter_fails_if_on_simple_type (UNUSED void **state)
 

Function Documentation

◆ test_can_filter_values()

void test_can_filter_values ( UNUSED void **  state)

Definition at line 122 of file test_var_search.c.

122  {
123  const char* sp1 = "94:83:c4:06:da:66.[MACAddress == '00:01:02:03:44:f0'].Extender";
124  const char* sp2 = "['Foundation' in Science-fiction].Author";
125  const char* sp3 = "*.Awards.*.[year == 1980]";
126  const char* sp4 = "0.[Age > 50]";
127  const char* sp5 = "0.[Age > 60]";
128  const char* sp6 = "0.[Age > 10]";
129 
130  amxc_htable_it_t* it = NULL;
131  amxc_var_t* data = NULL;
132  amxc_htable_t results;
133  amxc_htable_init(&results, 5);
134 
135  assert_int_equal(amxp_expr_find_var_values(test_set1, &results, sp1), 0);
136  assert_int_equal(amxc_htable_size(&results), 1);
137  it = amxc_htable_get(&results, "'94:83:c4:06:da:66'.0.'Extender'");
138  assert_non_null(it);
139  data = amxc_var_from_htable_it(it);
140  assert_non_null(data);
141  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_BOOL);
142  amxc_htable_clean(&results, variant_htable_it_free);
143 
144  amxc_htable_init(&results, 5);
145  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp2), 0);
146  assert_int_equal(amxc_htable_size(&results), 1);
147  it = amxc_htable_get(&results, "1.'Author'");
148  assert_non_null(it);
149  data = amxc_var_from_htable_it(it);
150  assert_non_null(data);
151  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_CSTRING);
152  amxc_htable_clean(&results, variant_htable_it_free);
153 
154  amxc_htable_init(&results, 5);
155  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp3), 0);
156  assert_int_equal(amxc_htable_size(&results), 1);
157  it = amxc_htable_get(&results, "2.'Awards'.'Hugo'.1");
158  assert_non_null(it);
159  data = amxc_var_from_htable_it(it);
160  assert_non_null(data);
161  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_HTABLE);
162  amxc_htable_clean(&results, variant_htable_it_free);
163 
164  amxc_htable_init(&results, 5);
165  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp4), 0);
166  assert_int_equal(amxc_htable_size(&results), 1);
167  it = amxc_htable_get(&results, "0.'John Doe'");
168  assert_non_null(it);
169  data = amxc_var_from_htable_it(it);
170  assert_non_null(data);
171  assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_HTABLE);
172  amxc_htable_clean(&results, variant_htable_it_free);
173 
174  amxc_htable_init(&results, 5);
175  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp5), 0);
176  assert_int_equal(amxc_htable_size(&results), 0);
177  amxc_htable_clean(&results, variant_htable_it_free);
178 
179  amxc_htable_init(&results, 5);
180  assert_int_equal(amxp_expr_find_var_values(test_set2, &results, sp6), 0);
181  assert_int_equal(amxc_htable_size(&results), 2);
182  amxc_htable_clean(&results, variant_htable_it_free);
183 }
int amxp_expr_find_var_values(const amxc_var_t *const var, amxc_htable_t *values, const char *path)
Search matching variant paths in a composite variant.
static amxc_var_t * test_set1
static amxc_var_t * test_set2

◆ test_can_get_filtered_value()

void test_can_get_filtered_value ( UNUSED void **  state)

Definition at line 202 of file test_var_search.c.

202  {
203  const char* sp1 = "2.'Awards'.'Hugo'.1";
204  const char* sp2 = "*.Awards.*.[year == 1980]";
205  amxc_var_t* data = NULL;
206 
207  data = amxp_expr_find_var(test_set2, sp1);
208  assert_non_null(data);
209 
210  data = amxp_expr_find_var(test_set2, sp2);
211  assert_non_null(data);
212 }
amxc_var_t * amxp_expr_find_var(const amxc_var_t *const var, const char *path)
Search a matching variant and returns a pointer to that variant.

◆ test_can_use_paths()

void test_can_use_paths ( UNUSED void **  state)

Definition at line 185 of file test_var_search.c.

185  {
186  const char* sp1 = "2.'Awards'.'Hugo'.1";
187  amxc_llist_it_t* it = NULL;
188  amxc_string_t* path = NULL;
189  amxc_llist_t results;
190  amxc_llist_init(&results);
191 
192  assert_int_equal(amxp_expr_find_var_paths(test_set2, &results, sp1), 0);
193  assert_int_equal(amxc_llist_size(&results), 1);
194  it = amxc_llist_get_first(&results);
195  assert_non_null(it);
196  path = amxc_string_from_llist_it(it);
197  assert_non_null(path);
198  assert_string_equal(amxc_string_get(path, 0), sp1);
199  amxc_llist_clean(&results, amxc_string_list_it_free);
200 }
int amxp_expr_find_var_paths(const amxc_var_t *const var, amxc_llist_t *paths, const char *path)
Search matching variant paths in a composite variant.
static amxc_string_t path

◆ test_filter_fails_if_on_simple_type()

void test_filter_fails_if_on_simple_type ( UNUSED void **  state)

Definition at line 222 of file test_var_search.c.

222  {
223  const char* sp1 = "0.Age.[Age > 10]";
224  amxc_var_t* data = NULL;
225 
226  data = amxp_expr_find_var(test_set2, sp1);
227  assert_null(data);
228 }

◆ test_get_filtered_value_fails_when_multiple_matches_found()

void test_get_filtered_value_fails_when_multiple_matches_found ( UNUSED void **  state)

Definition at line 214 of file test_var_search.c.

214  {
215  const char* sp1 = "0.[Age > 10]";
216  amxc_var_t* data = NULL;
217 
218  data = amxp_expr_find_var(test_set2, sp1);
219  assert_null(data);
220 }

◆ test_var_search_setup()

int test_var_search_setup ( UNUSED void **  state)

Definition at line 110 of file test_var_search.c.

110  {
111  assert_int_equal(read_data("./test_set1.data", &test_set1), 0);
112  assert_int_equal(read_data("./test_set2.data", &test_set2), 0);
113  return 0;
114 }
static int read_data(const char *file, amxc_var_t **data)

◆ test_var_search_teardown()

int test_var_search_teardown ( UNUSED void **  state)

Definition at line 116 of file test_var_search.c.

116  {
117  amxc_var_delete(&test_set1);
118  amxc_var_delete(&test_set2);
119  return 0;
120 }