summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2023-09-27 10:29:25 +0800
committerchenzizhan <[email protected]>2023-09-27 10:29:25 +0800
commit8aa5acacaab482dfba1a17734880cb01aac84f09 (patch)
tree44f8a90893f36a4f83c860cc7d4f1fb57fcaad0e /test
parent9f0a0a6830336242386f82bf5401dcf19725e1af (diff)
test hll and histogram
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt5
-rw-r--r--test/test_metric_histogram.cpp102
-rw-r--r--test/test_metric_hll.cpp117
-rw-r--r--test/utils.hpp1
4 files changed, 75 insertions, 150 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index fd9525f..666b7c8 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -51,9 +51,8 @@ endfunction()
# add_unit_test(test_fuzz_test)
# add_unit_test(test_merge)
add_unit_test(test_metric_counter)
-# add_unit_test(test_metric_histogram)
-# add_unit_test(test_metric_hll)
+add_unit_test(test_metric_histogram)
+add_unit_test(test_metric_hll)
# add_unit_test(test_performance)
add_unit_test(test_register_and_reset)
-# add_unit_test(test_serialize)
add_unit_test(unit_test_cell_manager) \ No newline at end of file
diff --git a/test/test_metric_histogram.cpp b/test/test_metric_histogram.cpp
index 4487e6e..81e1e50 100644
--- a/test/test_metric_histogram.cpp
+++ b/test/test_metric_histogram.cpp
@@ -12,12 +12,9 @@ struct fieldstat *test_init_standard_instance_one_cube_one_metric_one_cell_hdr()
int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
EXPECT_EQ(cube_id, 0);
- int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test hdr metric", 1, 600000, 3);
+ int metric_id = fieldstat_register_hist(instance, "czz_test hdr metric", 1, 600000, 3);
EXPECT_EQ(metric_id, 0);
- int cell_id = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING, 1, 1);
- EXPECT_EQ(cell_id, 0);
-
return instance;
}
@@ -30,21 +27,17 @@ void test_assert_standard_instance(const struct fieldstat *instance)
int ret_cell_id = ret_cube_id_arr[0];
free(ret_cube_id_arr);
EXPECT_EQ(ret_cell_id, 0);
- int ret_metric_id = fieldstat_get_max_metric_id(instance, ret_cell_id);
- EXPECT_EQ(ret_metric_id, 0);
- const char *name = fieldstat_get_metric_name(instance, 0, 0);
+ const char *name = fieldstat_get_metric_name(instance, 0);
EXPECT_STREQ(name, "czz_test hdr metric");
- int *ret_cell_ids = NULL;
+
struct fieldstat_tag_list *tag_list = NULL;
size_t n_cell = 0;
- fieldstat_get_cells_used_by_metric(instance, 0, 0, &ret_cell_ids, &tag_list, &n_cell);
+ fieldstat_get_cells_used_by_metric(instance, 0, 0, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 1);
- EXPECT_EQ(ret_cell_ids[0], 0);
EXPECT_EQ(tag_list->n_tag, 1);
EXPECT_STREQ(tag_list->tag[0].key, TEST_TAG_STRING.key);
- free(ret_cell_ids);
fieldstat_tag_list_arr_free(tag_list, n_cell);
}
@@ -52,99 +45,66 @@ TEST(metric_test_histogram, simple_register_and_query)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
- fieldstat_hist_record(instance, 0, 0, 0, 123);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 123);
test_assert_standard_instance(instance);
- EXPECT_EQ(fieldstat_hist_value_at_percentile(instance, 0, 0, 0, 50.0), 1234);
- EXPECT_EQ(fieldstat_hist_count_le_value(instance, 0, 0, 0, 1000), 1);
+ EXPECT_EQ(fieldstat_hist_value_at_percentile(instance, 0, 0, &TEST_TAG_LIST_STRING, 50.0), 1234);
+ EXPECT_EQ(fieldstat_hist_count_le_value(instance, 0, 0, &TEST_TAG_LIST_STRING, 1000), 1);
fieldstat_free(instance);
}
-TEST(metric_test_histogram, serialize_and_merge)
+TEST(metric_test_histogram, merge)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
- fieldstat_hist_record(instance, 0, 0, 0, 123);
-
- char *blob = NULL;
- size_t blob_len = 0;
- fieldstat_serialize(instance, &blob, &blob_len);
- struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 123);
+
struct fieldstat *instance_total = fieldstat_new();
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_merge(instance_total, instance);
// query
test_assert_standard_instance(instance_total);
- EXPECT_EQ(fieldstat_hist_value_at_percentile(instance_total, 0, 0, 0, 50.0), 1234);
- EXPECT_EQ(fieldstat_hist_count_le_value(instance, 0, 0, 0, 1000), 1);
+ EXPECT_EQ(fieldstat_hist_value_at_percentile(instance_total, 0, 0, &TEST_TAG_LIST_STRING, 50.0), 1234);
+ EXPECT_EQ(fieldstat_hist_count_le_value(instance, 0, 0, &TEST_TAG_LIST_STRING, 1000), 1);
fieldstat_free(instance);
- fieldstat_free(instance_from_blob);
fieldstat_free(instance_total);
}
-TEST(metric_test_histogram, serialization_and_merge_twice_with_reset)
+TEST(metric_test_histogram, merge_twice_with_reset)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hdr();
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
- fieldstat_hist_record(instance, 0, 0, 0, 123);
-
- char *blob = NULL;
- size_t blob_len = 0;
- fieldstat_serialize(instance, &blob, &blob_len);
- struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 123);
+
struct fieldstat *instance_total = fieldstat_new();
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_merge(instance_total, instance);
- fieldstat_free(instance_from_blob);
fieldstat_reset(instance);
- int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_STRING, 1, 1);
- EXPECT_EQ(cell_id, 0);
- fieldstat_hist_record(instance, 0, 0, 0, 1234);
-
- fieldstat_serialize(instance, &blob, &blob_len);
- instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_hist_record(instance, 0, 0, &TEST_TAG_STRING, 1, 1234);
+ fieldstat_merge(instance_total, instance);
test_assert_standard_instance(instance_total);
- EXPECT_EQ(fieldstat_hist_value_at_percentile(instance_total, 0, 0, 0, 50.0), 1234);
- EXPECT_EQ(fieldstat_hist_count_le_value(instance_total, 0, 0, 0, 1000), 1);
+ EXPECT_EQ(fieldstat_hist_value_at_percentile(instance_total, 0, 0, &TEST_TAG_LIST_STRING, 50.0), 1234);
+ EXPECT_EQ(fieldstat_hist_count_le_value(instance_total, 0, 0, &TEST_TAG_LIST_STRING, 1000), 1);
fieldstat_free(instance);
- fieldstat_free(instance_from_blob);
fieldstat_free(instance_total);
}
-TEST(metric_test_histogram, add_or_set_with_wrong_cell_id_expecting_fail)
-{
- struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 600000, 3);
-
- int ret = fieldstat_hist_record(instance, cube_id, metric_id, 1, 1234);
- EXPECT_EQ(ret, FS_ERR_INVALID_TAG);
- ret = fieldstat_hist_record(instance, cube_id, metric_id, -1, 1234);
- EXPECT_EQ(ret, FS_ERR_INVALID_TAG);
-
- fieldstat_free(instance);
-}
-
TEST(metric_test_histogram, add_with_wrong_cube_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int ret = fieldstat_hist_record(instance, cube_id + 1, 0, 1, 1);
+ int ret = fieldstat_hist_record(instance, cube_id + 1, 0, &TEST_TAG_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
- ret = fieldstat_hist_record(instance, -1, 0, 1, 1);
+ ret = fieldstat_hist_record(instance, -1, 0, &TEST_TAG_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
fieldstat_free(instance);
@@ -154,11 +114,11 @@ TEST(metric_test_histogram, add_with_wrong_metric_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 600000, 3);
+ int metric_id = fieldstat_register_hist(instance, "czz_test", 1, 600000, 3);
- int ret = fieldstat_hist_record(instance, cube_id, metric_id + 1, 1, 1);
+ int ret = fieldstat_hist_record(instance, cube_id, metric_id + 1, &TEST_TAG_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
- ret = fieldstat_hist_record(instance, cube_id, -1, 1, 1);
+ ret = fieldstat_hist_record(instance, cube_id, -1, &TEST_TAG_INT, 1, 1);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
fieldstat_free(instance);
diff --git a/test/test_metric_hll.cpp b/test/test_metric_hll.cpp
index daa017a..5698e16 100644
--- a/test/test_metric_hll.cpp
+++ b/test/test_metric_hll.cpp
@@ -9,12 +9,9 @@ struct fieldstat *test_init_standard_instance_one_cube_one_metric_one_cell_hll(b
int cube_id = fieldstat_create_cube(instance, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
EXPECT_EQ(cube_id, 0);
- int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
+ int metric_id = fieldstat_register_hll(instance, "czz_test hll metric", 10);
EXPECT_EQ(metric_id, 0);
- int cell_id = fieldstat_cube_add(instance, cube_id, &TEST_TAG_STRING, 1, 1);
- EXPECT_EQ(cell_id, 0);
-
return instance;
}
@@ -27,94 +24,76 @@ void test_assert_standard_instance(const struct fieldstat *instance)
int ret_cell_id = ret_cube_id_arr[0];
free(ret_cube_id_arr);
EXPECT_EQ(ret_cell_id, 0);
- int ret_metric_id = fieldstat_get_max_metric_id(instance, ret_cell_id);
- EXPECT_EQ(ret_metric_id, 0);
- const char *name = fieldstat_get_metric_name(instance, 0, 0);
+ const char *name = fieldstat_get_metric_name(instance, 0);
EXPECT_STREQ(name, "czz_test hll metric");
- int *ret_cell_ids = NULL;
struct fieldstat_tag_list *tag_list = NULL;
size_t n_cell = 0;
- fieldstat_get_cells_used_by_metric(instance, 0, 0, &ret_cell_ids, &tag_list, &n_cell);
+ fieldstat_get_cells_used_by_metric(instance, 0, 0, &tag_list, &n_cell);
EXPECT_EQ(n_cell, 1);
- EXPECT_EQ(ret_cell_ids[0], 0);
EXPECT_EQ(tag_list->n_tag, 1);
- EXPECT_STREQ(tag_list->tag[0].key, TEST_TAG_STRING.key);
+ EXPECT_STREQ(tag_list->tag[0].key, TEST_TAG_INT.key);
- free(ret_cell_ids);
fieldstat_tag_list_arr_free(tag_list, n_cell);
}
+double my_fieldstat_hll_get(const struct fieldstat *instance, int cube_id, int metric_id)
+{
+ double ret = 0;
+ fieldstat_hll_get(instance, cube_id, metric_id, &TEST_TAG_LIST_INT, &ret);
+ return ret;
+}
+
TEST(metric_test_hll, simple_register_and_query)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hll();
- fieldstat_hll_add(instance, 0, 0, 0, "hello", 5);
- fieldstat_hll_add(instance, 0, 0, 0, "wor", 3);
- fieldstat_hll_add(instance, 0, 0, 0, "world", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "hello", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "wor", 3);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "world", 5);
test_assert_standard_instance(instance);
- EXPECT_NEAR(fieldstat_hll_get(instance, 0, 0, 0), 3, 0.5);
+ EXPECT_NEAR(my_fieldstat_hll_get(instance, 0, 0), 3, 0.5);
fieldstat_free(instance);
}
-TEST(metric_test_hll, serialize_and_merge)
+TEST(metric_test_hll, merge)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hll();
- fieldstat_hll_add(instance, 0, 0, 0, "hello", 5);
- fieldstat_hll_add(instance, 0, 0, 0, "wor", 3);
- fieldstat_hll_add(instance, 0, 0, 0, "world", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "hello", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "wor", 3);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "world", 5);
- char *blob = NULL;
- size_t blob_len = 0;
- fieldstat_serialize(instance, &blob, &blob_len);
- struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
struct fieldstat *instance_total = fieldstat_new();
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_merge(instance_total, instance);
// query
test_assert_standard_instance(instance_total);
- EXPECT_NEAR(fieldstat_hll_get(instance, 0, 0, 0), 3, 0.5);
-
+ EXPECT_NEAR(my_fieldstat_hll_get(instance, 0, 0), 3, 0.5);
fieldstat_free(instance);
- fieldstat_free(instance_from_blob);
fieldstat_free(instance_total);
}
-TEST(metric_test_hll, serialization_and_merge_twice_with_reset)
+TEST(metric_test_hll, merge_twice_with_reset)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hll();
- fieldstat_hll_add(instance, 0, 0, 0, "hello", 5);
- fieldstat_hll_add(instance, 0, 0, 0, "wor", 3);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "hello", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "wor", 3);
- char *blob = NULL;
- size_t blob_len = 0;
- fieldstat_serialize(instance, &blob, &blob_len);
- struct fieldstat *instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
struct fieldstat *instance_total = fieldstat_new();
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_merge(instance_total, instance);
- fieldstat_free(instance_from_blob);
fieldstat_reset(instance);
- int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_STRING, 1, 1);
- EXPECT_EQ(cell_id, 0);
- fieldstat_hll_add(instance, 0, 0, 0, "world", 5);
-
- fieldstat_serialize(instance, &blob, &blob_len);
- instance_from_blob = fieldstat_deserialize(blob, blob_len);
- free(blob);
- fieldstat_merge(instance_total, instance_from_blob);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "world", 5);
+ fieldstat_merge(instance_total, instance);
test_assert_standard_instance(instance_total);
- EXPECT_NEAR(fieldstat_hll_get(instance_total, 0, 0, 0), 3, 0.5);
+ EXPECT_NEAR(my_fieldstat_hll_get(instance_total, 0, 0), 3, 0.5);
fieldstat_free(instance);
- fieldstat_free(instance_from_blob);
fieldstat_free(instance_total);
}
@@ -128,13 +107,13 @@ TEST(metric_test_hll, serialization_and_merge_twice_with_reset)
TEST(metric_test_hll, serialize_with_b64_and_query)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hll();
- fieldstat_hll_add(instance, 0, 0, 0, "hello", 5);
- fieldstat_hll_add(instance, 0, 0, 0, "wor", 3);
- fieldstat_hll_add(instance, 0, 0, 0, "world", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "hello", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "wor", 3);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "world", 5);
char *blob = NULL;
size_t blob_len = 0;
- fieldstat_get_serialized_blob(instance, 0, 0, 0, &blob, &blob_len);
+ fieldstat_get_serialized_blob(instance, 0, 0, &TEST_TAG_LIST_INT, &blob, &blob_len);
size_t dec_size = 0;
unsigned char *dec = b64_decode_ex(blob, blob_len, &dec_size);
@@ -173,13 +152,13 @@ extern "C" {
TEST(metric_test_hll, serialize_with_b64_and_query_with_python_api)
{
struct fieldstat *instance = test_init_standard_instance_one_cube_one_metric_one_cell_hll();
- fieldstat_hll_add(instance, 0, 0, 0, "hello", 5);
- fieldstat_hll_add(instance, 0, 0, 0, "wor", 3);
- fieldstat_hll_add(instance, 0, 0, 0, "world", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "hello", 5);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "wor", 3);
+ fieldstat_hll_add(instance, 0, 0, &TEST_TAG_INT, 1, "world", 5);
char *blob = NULL;
size_t blob_len = 0;
- fieldstat_get_serialized_blob(instance, 0, 0, 0, &blob, &blob_len);
+ fieldstat_get_serialized_blob(instance, 0, 0, &TEST_TAG_LIST_INT, &blob, &blob_len);
bool flag = fieldstat_is_hll(blob);
EXPECT_EQ(flag, true);
@@ -191,28 +170,14 @@ TEST(metric_test_hll, serialize_with_b64_and_query_with_python_api)
ST_hyperloglog_free((struct ST_hyperloglog *)hll_from_blob);
}
-TEST(metric_test_hll, add_or_set_with_wrong_cell_id_expecting_fail)
-{
- struct fieldstat *instance = fieldstat_new();
- int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
-
- int ret = fieldstat_hll_add(instance, cube_id, metric_id, 1, "hello", 5);
- EXPECT_EQ(ret, FS_ERR_INVALID_TAG);
- ret = fieldstat_hll_add(instance, cube_id, metric_id, -1, "hello", 5);
- EXPECT_EQ(ret, FS_ERR_INVALID_TAG);
-
- fieldstat_free(instance);
-}
-
TEST(metric_test_hll, add_with_wrong_cube_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int ret = fieldstat_hll_add(instance, cube_id + 1, 0, 0, "hello", 5);
+ int ret = fieldstat_hll_add(instance, cube_id + 1, 0, &TEST_TAG_INT, 1, "hello", 5);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
- ret = fieldstat_hll_add(instance, -1, 0, 0, "hello", 5);
+ ret = fieldstat_hll_add(instance, -1, 0, &TEST_TAG_INT, 1, "hello", 5);
EXPECT_EQ(ret, FS_ERR_INVALID_CUBE_ID);
fieldstat_free(instance);
@@ -222,11 +187,11 @@ TEST(metric_test_hll, add_with_wrong_metric_id_expecting_fail)
{
struct fieldstat *instance = fieldstat_new();
int cube_id = fieldstat_create_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
- int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
+ int metric_id = fieldstat_register_hll(instance, "czz_test hll metric", 10);
- int ret = fieldstat_hll_add(instance, cube_id, metric_id + 1, 0, "hello", 5);
+ int ret = fieldstat_hll_add(instance, cube_id, metric_id + 1, &TEST_TAG_INT, 1, "hello", 5);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
- ret = fieldstat_hll_add(instance, cube_id, -1, 0, "hello", 5);
+ ret = fieldstat_hll_add(instance, cube_id, -1, &TEST_TAG_INT, 1, "hello", 5);
EXPECT_EQ(ret, FS_ERR_INVALID_METRIC_ID);
fieldstat_free(instance);
diff --git a/test/utils.hpp b/test/utils.hpp
index 92d6705..4fe7fde 100644
--- a/test/utils.hpp
+++ b/test/utils.hpp
@@ -4,6 +4,7 @@
#include "fieldstat.h"
const struct fieldstat_tag TEST_TAG_STRING = {"STRING KEY_", TAG_CSTRING, {.value_str = "100.1"}};
+const struct fieldstat_tag_list TEST_TAG_LIST_STRING = {(struct fieldstat_tag *)&TEST_TAG_STRING, 1};
const struct fieldstat_tag TEST_TAG_STRING_collided = {"collided", TAG_CSTRING, {.value_str = "2"}};
const struct fieldstat_tag TEST_TAG_INT = {"INT key_", TAG_INTEGER, {.value_longlong = 100}};
const struct fieldstat_tag_list TEST_TAG_LIST_INT = {(struct fieldstat_tag *)&TEST_TAG_INT, 1};