test: move all module tests to the test/ directory

This commit is contained in:
2025-11-01 10:12:18 +00:00
parent a68b9f7ba7
commit bd2fe50ec9
32 changed files with 5 additions and 5 deletions

37
test/serial/streams.c Normal file
View File

@@ -0,0 +1,37 @@
#include <blue/core/stream.h>
#include <blue/ds/array.h>
#include <blue/ds/dict.h>
#include <blue/ds/number.h>
#include <blue/ds/string.h>
#include <blue/serial.h>
#include <stdio.h>
int main(void)
{
b_serial_ctx *ctx = b_toml_serial_ctx_create();
b_dict *dict = b_dict_create();
b_array *array = b_array_create();
b_array_append(array, B_RV_INT(32));
b_array_append(array, B_RV_INT(64));
b_array_append(array, B_RV_INT(128));
b_dict_put(dict, "numbers", B_RV(array));
array = b_array_create();
b_array_append(array, B_RV_CSTR("hello"));
b_array_append(array, B_RV_CSTR("world"));
b_dict_put(dict, "strings", B_RV(array));
b_object_to_string(dict, b_stdout);
b_stream_write_char(b_stdout, '\n');
b_serial_ctx_serialise(ctx, dict, b_stdout, 0);
b_dict_unref(dict);
b_serial_ctx_unref(ctx);
return 0;
}

223
test/serial/toml-decode.c Normal file
View File

@@ -0,0 +1,223 @@
#include <blue/ds/array.h>
#include <blue/ds/datetime.h>
#include <blue/ds/dict.h>
#include <blue/ds/number.h>
#include <blue/ds/string.h>
#include <blue/serial.h>
#include <inttypes.h>
void write_tagged_value(b_object *data);
void write_raw_string(const b_string *data)
{
b_stream_write_string(b_stdout, "\"", NULL);
const b_iterator *it = b_iterator_cbegin(data);
b_foreach_c(b_wchar, c, it)
{
if (c >= 0x10000) {
c -= 0x10000;
long hi = 0xD800 | ((c >> 10) & 0x3FF);
long lo = 0xDC00 | (c & 0x3FF);
b_stream_write_fmt(b_stdout, NULL, "\\u%04x\\u%04x", hi, lo);
} else if (c <= 0x1F || c >= 0x7F) {
b_stream_write_fmt(b_stdout, NULL, "\\u%04x", c);
} else if (c == '\\' || c == '"') {
b_stream_write_fmt(b_stdout, NULL, "\\%c", c);
} else {
b_stream_write_char(b_stdout, c);
}
}
b_iterator_unref(it);
b_stream_write_string(b_stdout, "\"", NULL);
}
void write_tagged_string(b_string *data)
{
b_stream_write_string(b_stdout, "{ \"type\": \"string\", \"value\": ", NULL);
write_raw_string(data);
b_stream_write_string(b_stdout, " }", NULL);
}
void write_tagged_integer(b_number *data)
{
b_stream_write_string(
b_stdout, "{ \"type\": \"integer\", \"value\": \"", NULL);
if (b_number_is_inf_positive(data)) {
b_stream_write_string(b_stdout, "inf", NULL);
} else if (b_number_is_inf_negative(data)) {
b_stream_write_string(b_stdout, "-inf", NULL);
} else if (b_number_is_nan_positive(data)) {
b_stream_write_string(b_stdout, "nan", NULL);
} else if (b_number_is_nan_negative(data)) {
b_stream_write_string(b_stdout, "-nan", NULL);
} else {
b_stream_write_fmt(
b_stdout, NULL, "%lld", b_number_get_longlong(data), NULL);
}
b_stream_write_string(b_stdout, "\" }", NULL);
}
void write_tagged_float(b_number *data)
{
b_stream_write_string(
b_stdout, "{ \"type\": \"float\", \"value\": \"", NULL);
if (b_number_is_inf_positive(data)) {
b_stream_write_string(b_stdout, "inf", NULL);
} else if (b_number_is_inf_negative(data)) {
b_stream_write_string(b_stdout, "-inf", NULL);
} else if (b_number_is_nan_positive(data)) {
b_stream_write_string(b_stdout, "nan", NULL);
} else if (b_number_is_nan_negative(data)) {
b_stream_write_string(b_stdout, "-nan", NULL);
} else {
double v = b_number_get_double(data);
if ((v <= 0.00000001 && v > 0) || (v >= -0.00000001 && v < 0)
|| (v >= 1000000000) || (v <= -1000000000)) {
b_stream_write_fmt(b_stdout, NULL, "%.15e", v, NULL);
} else {
b_stream_write_fmt(b_stdout, NULL, "%.15f", v, NULL);
}
}
b_stream_write_string(b_stdout, "\" }", NULL);
}
void write_tagged_bool(b_number *data)
{
int v = b_number_get_int8(data);
b_stream_write_fmt(
b_stdout, NULL, "{ \"type\": \"bool\", \"value\": \"%s\" }",
(v > 0) ? "true" : "false", NULL);
}
void write_tagged_datetime(b_datetime *data)
{
bool has_date = b_datetime_has_date(data);
bool has_time = b_datetime_has_time(data);
bool localtime = b_datetime_is_localtime(data);
b_stream_write_string(b_stdout, "{ \"type\": \"", NULL);
if (has_date && has_time) {
b_stream_write_string(
b_stdout, localtime ? "datetime-local" : "datetime", NULL);
} else if (has_date) {
b_stream_write_string(
b_stdout, localtime ? "date-local" : "date", NULL);
} else if (has_time) {
b_stream_write_string(
b_stdout, localtime ? "time-local" : "time", NULL);
}
b_stream_write_string(b_stdout, "\", \"value\": \"", NULL);
b_string *new_data = b_string_create();
b_datetime_to_string(data, B_DATETIME_FORMAT_RFC3339, new_data);
b_stream_write_string(b_stdout, b_string_ptr(new_data), NULL);
b_stream_write_string(b_stdout, "\" }", NULL);
b_string_unref(new_data);
}
void write_tagged_dict(b_dict *data)
{
b_stream_write_string(b_stdout, "{ ", NULL);
int i = 0;
b_iterator *it = b_iterator_begin(data);
b_foreach(b_dict_item *, item, it)
{
if (i++ > 0) {
b_stream_write_string(b_stdout, ", ", NULL);
}
write_raw_string(item->key);
b_stream_write_string(b_stdout, ": ", NULL);
write_tagged_value(item->value);
}
b_iterator_unref(it);
b_stream_write_string(b_stdout, " }", NULL);
}
void write_tagged_array(b_array *data)
{
b_stream_write_string(b_stdout, "[ ", NULL);
int i = 0;
b_iterator *it = b_iterator_begin(data);
b_foreach(b_object *, obj, it)
{
if (i++ > 0) {
b_stream_write_string(b_stdout, ", ", NULL);
}
write_tagged_value(obj);
}
b_iterator_unref(it);
b_stream_write_string(b_stdout, " ]", NULL);
}
void write_tagged_value(b_object *data)
{
if (b_object_is_type(data, B_TYPE_DICT)) {
write_tagged_dict(data);
} else if (b_object_is_type(data, B_TYPE_ARRAY)) {
write_tagged_array(data);
} else if (b_object_is_type(data, B_TYPE_STRING)) {
write_tagged_string(data);
} else if (b_object_is_type(data, B_TYPE_DATETIME)) {
write_tagged_datetime(data);
} else if (b_object_is_type(data, B_TYPE_NUMBER)) {
switch (b_number_get_number_type(data)) {
case B_NUMBER_LONGLONG:
write_tagged_integer(data);
break;
case B_NUMBER_INT8:
write_tagged_bool(data);
break;
case B_NUMBER_DOUBLE:
write_tagged_float(data);
break;
default:
break;
}
}
}
int main(void)
{
b_stream *src = b_stdin;
b_stream *dest = b_stdout;
b_serial_ctx *ctx = b_toml_serial_ctx_create();
b_object *data;
b_status status = b_serial_ctx_deserialise(ctx, src, &data, 0);
if (!B_OK(status)) {
return 1;
}
write_tagged_value(data);
b_stream_write_char(b_stdout, '\n');
b_serial_ctx_unref(ctx);
b_object_unref(data);
return 0;
}

27
test/serial/toml-encode.c Normal file
View File

@@ -0,0 +1,27 @@
#include <blue/serial.h>
int main(void)
{
b_stream *src = b_stdin;
b_stream *dest = b_stdout;
#if 0
b_serial_ctx *ctx;
b_serial_ctx_create(&ctx);
b_object *data;
b_status status = b_serial_ctx_deserialise(
ctx, B_SERIAL_FORMAT_JSON, src, &data, 0);
if (!B_OK(status)) {
return -1;
}
b_to_string(B_OBJECT(data), dest);
b_stream_write_char(b_stdout, '\n');
b_release(data);
b_serial_ctx_destroy(ctx);
#endif
return 0;
}