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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list