Changeset: 64578f383883 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64578f383883 Modified Files: ctest/tools/monetdbe/cmocka_test.c ctest/tools/monetdbe/test_helper.c ctest/tools/monetdbe/test_helper.h ctest/tools/monetdbe/test_helper_template.h Branch: default Log Message:
merged diffs (truncated from 347 to 300 lines): diff --git a/ctest/tools/monetdbe/cmocka_test.c b/ctest/tools/monetdbe/cmocka_test.c --- a/ctest/tools/monetdbe/cmocka_test.c +++ b/ctest/tools/monetdbe/cmocka_test.c @@ -40,7 +40,7 @@ static void create_table_test(void **sta monetdbe_database mdbe = *state; char* err; - err = monetdbe_query(mdbe, "CREATE TABLE test (x integer, y string)", NULL, NULL); + err = monetdbe_query(mdbe, "CREATE TABLE test (si SMALLINT,i INTEGER, bi BIGINT, c CLOB, b BLOB, d DATE, t TIME, ts TIMESTAMP)", NULL, NULL); assert_null(err); } @@ -49,7 +49,13 @@ static void populate_table_test(void **s monetdbe_database mdbe = *state; char* err; - err = monetdbe_query(mdbe, "INSERT INTO test VALUES (42, 'Hello, '), (58, 'World!')", NULL, NULL); + err = monetdbe_query(mdbe, + "INSERT INTO test VALUES " + "(4, 40, 400, 'aaa', x'aaaaaa', '2020-06-17', '12:00:00', '2020-06-17 12:00:00')," + "(6, 60, 600, 'ccc', x'cccccc', '2022-06-17', '14:00:00', '2022-06-17 14:00:00')," + "(5, 50, 500, 'bbb', x'bbbbbb', '2021-06-17', '13:00:00', '2021-06-17 13:00:00')," + "(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)", + NULL, NULL); assert_null(err); } @@ -60,22 +66,14 @@ static void query_table_test(void **stat monetdbe_database mdbe = *state; char* err; - err = monetdbe_query(mdbe, "SELECT MIN(x), CONCAT(MIN(y), MAX(y)) FROM test; ", &result, NULL); + err = monetdbe_query(mdbe, "SELECT MIN(si), MAX(i) FROM test; ", &result, NULL); assert_null(err); - assert_int_equal((int) result->nrows, 1); assert_int_equal((int) result->ncols, 2); - monetdbe_column* rcol; - - CHECK_COLUMN(mdbe, result, 0, int32_t, {42}); - err = monetdbe_result_fetch(result, &rcol, 1); - assert_null(err); - - monetdbe_column_str * col_y = (monetdbe_column_str *) rcol; - - assert_string_equal((const char*) col_y->data[0], "Hello, World!"); + assert_true(CHECK_COLUMN(result, 0, int16_t, {{4}})); + assert_true(CHECK_COLUMN(result, 1, int32_t, {{60}})); err = monetdbe_cleanup_result(mdbe, result); @@ -88,15 +86,45 @@ static void query_table_test2(void **sta monetdbe_database mdbe = *state; char* err; - err = monetdbe_query(mdbe, "SELECT x, y FROM test; ", &result, NULL); + err = monetdbe_query(mdbe, "SELECT si, i, bi, c, b, d, t, ts FROM test; ", &result, NULL); assert_null(err); - assert_int_equal((int) result->nrows, 2); - assert_int_equal((int) result->ncols, 2); + assert_int_equal((int) result->ncols, 8); + + int a; + + assert_true(CHECK_COLUMN(result, 0, int16_t, {{(a=3,a+1)}, {6}, {5}, Null})); + assert_true(CHECK_COLUMN(result, 1, int32_t, {{40}, {60}, {50}, Null})); + assert_true(CHECK_COLUMN(result, 2, int64_t, {{400}, {600}, {500}, Null})); + assert_true(CHECK_COLUMN(result, 3, str, {{"aaa"}, {"ccc"}, {"bbb"}, Null})); + assert_true(CHECK_COLUMN(result, 4, blob, {{{3, "\xaa\xaa\xaa"}}, {{3, "\xcc\xcc\xcc"}}, {{3, "\xbb\xbb\xbb"}}, Null})); + assert_true(CHECK_COLUMN(result, 5, date, {{{17, 6, 2020}}, {{17, 6, 2022}}, {{17, 6, 2021}}, Null})); + assert_true(CHECK_COLUMN(result, 6, time, {{{0, 0, 0, 12}}, {{0, 0, 0, 14}}, {{0, 0, 0, 13}}, Null})); + assert_true(CHECK_COLUMN(result, 7, timestamp, {{{{17, 6, 2020}, {0, 0, 0, 12}}}, {{{17, 6, 2022}, {0, 0, 0, 14}}}, {{{17, 6, 2021}, {0, 0, 0, 13}}}, Null})); + + err = monetdbe_cleanup_result(mdbe, result); + + assert_null(err); +} - assert_true(CHECK_COLUMN(mdbe, result, 0, int32_t, {42, 58})); - assert_true(CHECK_COLUMN(mdbe, result, 1, str, {"Hello, ", "World!"})); +static void query_table_test3(void **state) { + + monetdbe_result* result = NULL; + monetdbe_database mdbe = *state; + char* err; + + err = monetdbe_query(mdbe, "SELECT SUM(si), SUM(i), SUM(bi) FROM test; ", &result, NULL); + + assert_null(err); + + assert_int_equal((int) result->ncols, 3); + + /* TODO: Figure out what is expected here. + assert_true(CHECK_COLUMN(result, 0, BIGGEST_INTEGER_TPE, {{15}})); + assert_true(CHECK_COLUMN(result, 1, BIGGEST_INTEGER_TPE, {{150}})); + assert_true(CHECK_COLUMN(result, 2, BIGGEST_INTEGER_TPE, {1500})); + */ err = monetdbe_cleanup_result(mdbe, result); @@ -110,7 +138,8 @@ main(void) cmocka_unit_test(create_table_test), cmocka_unit_test(populate_table_test), cmocka_unit_test(query_table_test), - cmocka_unit_test(query_table_test2) + cmocka_unit_test(query_table_test2), + cmocka_unit_test(query_table_test3) }; return cmocka_run_group_tests_name("SQL queries for MonetDBe", tests, setup, teardown); diff --git a/ctest/tools/monetdbe/test_helper.c b/ctest/tools/monetdbe/test_helper.c --- a/ctest/tools/monetdbe/test_helper.c +++ b/ctest/tools/monetdbe/test_helper.c @@ -1,101 +1,82 @@ #include "test_helper.h" -#define ACTUAL_TPE_monetdb_bool int8_t -#define ACTUAL_TPE_monetdb_int8_t int8_t -#define ACTUAL_TPE_monetdb_int16_t int16_t -#define ACTUAL_TPE_monetdb_int32_t int32_t -#define ACTUAL_TPE_monetdb_int64_t int64_t -#if HAVE_HGE -#define ACTUAL_TPE_monetdb_int128_t __int128 -#endif -#define ACTUAL_TPE_monetdb_size_t size_t -#define ACTUAL_TPE_monetdb_float float -#define ACTUAL_TPE_monetdb_double double -#define ACTUAL_TPE_monetdb_str char* -#define ACTUAL_TPE_monetdb_blob monetdbe_data_blob -#define ACTUAL_TPE_monetdb_date monetdbe_data_date -#define ACTUAL_TPE_monetdb_time monetdbe_data_time -#define ACTUAL_TPE_monetdb_timestamp monetdbe_data_timestamp - #define _CONCAT(A, B) A##B #define CONCAT(A, B) _CONCAT(A, B) - #define EXPAND(A) A -#define GET_ACTUAL_TPE(TPE_ID) ACTUAL_TPE_monetdb_##TPE_ID #define GET_TPE_ENUM(TPE) CONCAT(monetdb_, TPE) -#define TPE int8_t +#define TPE TEST_TPE_ID(int8_t) #define CHECK_COLUMN_FUNC check_column_bool #define TPE_ENUM monetdbe_bool #define MONETDB_COLUMN_TPE monetdbe_column_bool #include "test_helper_template.h" -#define TPE int8_t +#define TPE TEST_TPE_ID(int8_t) #define CHECK_COLUMN_FUNC check_column_int8_t #define TPE_ENUM monetdbe_int8_t #define MONETDB_COLUMN_TPE monetdbe_column_int8_t #include "test_helper_template.h" -#define TPE int16_t +#define TPE TEST_TPE_ID(int16_t) #define CHECK_COLUMN_FUNC check_column_int16_t #define TPE_ENUM monetdbe_int16_t #define MONETDB_COLUMN_TPE monetdbe_column_int16_t #include "test_helper_template.h" -#define TPE int32_t +#define TPE TEST_TPE_ID(int32_t) #define CHECK_COLUMN_FUNC check_column_int32_t #define TPE_ENUM monetdbe_int32_t #define MONETDB_COLUMN_TPE monetdbe_column_int32_t #include "test_helper_template.h" -#define TPE int64_t +#define TPE TEST_TPE_ID(int64_t) #define CHECK_COLUMN_FUNC check_column_int64_t #define TPE_ENUM monetdbe_int64_t #define MONETDB_COLUMN_TPE monetdbe_column_int64_t #include "test_helper_template.h" #if HAVE_HGE -#define TPE __int128 +#define TPE TEST_TPE_ID(int128_t) #define CHECK_COLUMN_FUNC check_column_int128_t #define TPE_ENUM monetdbe_int128_t #define MONETDB_COLUMN_TPE monetdbe_column_int128_t #include "test_helper_template.h" #endif -#define TPE size_t +#define TPE TEST_TPE_ID(size_t) #define CHECK_COLUMN_FUNC check_column_size_t #define TPE_ENUM monetdbe_size_t #define MONETDB_COLUMN_TPE monetdbe_column_size_t #include "test_helper_template.h" -#define TPE float +#define TPE TEST_TPE_ID(float) #define CHECK_COLUMN_FUNC check_column_float #define TPE_ENUM monetdbe_float #define MONETDB_COLUMN_TPE monetdbe_column_float #include "test_helper_template.h" -#define TPE double +#define TPE TEST_TPE_ID(double) #define CHECK_COLUMN_FUNC check_column_double #define TPE_ENUM monetdbe_double #define MONETDB_COLUMN_TPE monetdbe_column_double #include "test_helper_template.h" -#define TPE char* +#define TPE TEST_TPE_ID(str) #define CHECK_COLUMN_FUNC check_column_str #define TPE_ENUM monetdbe_str #define MONETDB_COLUMN_TPE monetdbe_column_str #define EQUALS(A,B) (strcmp(A, B)==0) #include "test_helper_template.h" -#define TPE monetdbe_data_blob +#define TPE TEST_TPE_ID(blob) #define CHECK_COLUMN_FUNC check_column_blob #define TPE_ENUM monetdbe_blob #define EQUALS(A,B) ((A).size != (B).size?false:(memcmp((A).data, (B).data, (A).size)) == 0) #define MONETDB_COLUMN_TPE monetdbe_column_blob #include "test_helper_template.h" -#define TPE monetdbe_data_date +#define TPE TEST_TPE_ID(date) #define CHECK_COLUMN_FUNC check_column_date #define TPE_ENUM monetdbe_date #define EQUALS_DATE(A,B) (((A).day == (B).day) && ((A).month == (B).month) && ((A).year == (B).year)) @@ -103,7 +84,7 @@ #define MONETDB_COLUMN_TPE monetdbe_column_date #include "test_helper_template.h" -#define TPE monetdbe_data_time +#define TPE TEST_TPE_ID(time) #define CHECK_COLUMN_FUNC check_column_time #define TPE_ENUM monetdbe_time #define EQUALS_TIME(A,B) (((A).ms == (B).ms) && ((A).seconds == (B).seconds) && ((A).minutes == (B).minutes) && ((A).hours == (B).hours)) @@ -111,7 +92,7 @@ #define MONETDB_COLUMN_TPE monetdbe_column_time #include "test_helper_template.h" -#define TPE monetdbe_data_timestamp +#define TPE TEST_TPE_ID(timestamp) #define CHECK_COLUMN_FUNC check_column_timestamp #define TPE_ENUM monetdbe_timestamp #define EQUALS(A,B) (EQUALS_DATE(A.date, B.date) && EQUALS_TIME(A.time, B.time)) diff --git a/ctest/tools/monetdbe/test_helper.h b/ctest/tools/monetdbe/test_helper.h --- a/ctest/tools/monetdbe/test_helper.h +++ b/ctest/tools/monetdbe/test_helper.h @@ -1,30 +1,63 @@ #include "monetdbe.h" -monetdbe_export bool check_column_bool (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, int8_t* expected_column); -monetdbe_export bool check_column_int8_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, int8_t* expected_column); -monetdbe_export bool check_column_int16_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, int16_t* expected_column); -monetdbe_export bool check_column_int32_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, int32_t* expected_column); -monetdbe_export bool check_column_int64_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, int64_t* expected_column); +#define TEST_TPE(TPE) struct {TPE data; char _is_null;} + +#define TEST_TPE_ID(TPE) TEST_##TPE + +#define TYPE_DEFTEST_TPE(TPE, ACTUAL_TPE) typedef TEST_TPE(ACTUAL_TPE) TEST_TPE_ID(TPE) + + +TYPE_DEFTEST_TPE(bool, int8_t); +TYPE_DEFTEST_TPE(int8_t, int8_t); +TYPE_DEFTEST_TPE(int16_t, int16_t); +TYPE_DEFTEST_TPE(int32_t, int32_t); +TYPE_DEFTEST_TPE(int64_t, int64_t); #if HAVE_HGE -monetdbe_export bool check_column_int128_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, __int128* expected_column); +TYPE_DEFTEST_TPE(int128_t, __int128); #endif -monetdbe_export bool check_column_size_t (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, size_t* expected_column); -monetdbe_export bool check_column_float (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, float* expected_column); -monetdbe_export bool check_column_double (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, double* expected_column); -monetdbe_export bool check_column_str (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, char ** expected_column); -monetdbe_export bool check_column_blob (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, monetdbe_data_blob* expected_column); -monetdbe_export bool check_column_date (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, monetdbe_data_date* expected_column); -monetdbe_export bool check_column_time (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, monetdbe_data_time* expected_column); -monetdbe_export bool check_column_timestamp (monetdbe_result* result, size_t column_index, size_t expected_nr_column_entries, monetdbe_data_timestamp* expected_column); +TYPE_DEFTEST_TPE(size_t, size_t); +TYPE_DEFTEST_TPE(float, float); +TYPE_DEFTEST_TPE(double, double); +TYPE_DEFTEST_TPE(str, char*); +TYPE_DEFTEST_TPE(blob, monetdbe_data_blob); +TYPE_DEFTEST_TPE(date, monetdbe_data_date); +TYPE_DEFTEST_TPE(time, monetdbe_data_time); +TYPE_DEFTEST_TPE(timestamp, monetdbe_data_timestamp); + +#define GET_ACTUAL_TPE(TPE_ID) ACTUAL_TPE_monetdb_##TPE_ID + +#define Null {._is_null = 1} -#ifndef str -#define str char* _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list