157 lines
8.1 KiB
C
Raw Normal View History

2025-01-14 17:53:15 +00:00
#define RMALLOC_OVERRIDE 1
#include "rtest.h"
#include "rliza.h"
#include "rio.h"
#include "rbench.h"
void performance_test() {
size_t size = rfile_size("resources/large.json");
char *data = malloc(size + 1);
rfile_readb("resources/large.json", data, size);
data[size] = 0;
RBENCH(1, {
int length = rliza_validate(data);
(void)length;
});
free(data);
}
int main() {
rtest_banner("rliza");
for (int i = 0; i < 100; i++) {
char *long_data =
"{\"event\": \"execute\", \"query\": \"update session set bytes = ?, ex= ? where key = ?\", \"params\": [\"{\\\"created\\\": "
"1731034143, \\\"session\\\": {\\\"req_id\\\": 1, \\\"much_data\\\": "
"\\\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\"}}\", null, \"AIOHTTP_SESSION_5a2510809b85492b8f14e8d3e2f11da3\"]}";
rassert(rliza_validate(long_data));
rliza_t *a = rliza_loads(&long_data);
rliza_free(a);
}
char *nested_obj = "{\"test\":123,\"test2\":{\"test3\":123}}";
rliza_t *a = rliza_loads(&nested_obj);
char *b = rliza_dumps(a);
printf("%s\n", b);
// rliza_dumpss(a);
rliza_free(a);
free(b);
rtest_banner("performance test");
performance_test();
rtest_banner("serialize/deserialize");
char *json_content = "{\"error\":\"not \\\"aaa\\\" "
"found\",\"rows\":[{\"a\":true},{\"b\":false},{\"c\":null},[1,23],[1,23],[1,23,true,false,5.5,5.505,6.1]]}";
rassert(rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\"rows\":[[1,23],[1,23],[1,23,true,false,5.5,5.505]]}"));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\"rows\":[[1,23],[1,23],[1,23,true,false,5.5,5.505,6.]]}"));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\"rows\""));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\"rows\":["));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\"rows"));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\",\""));
rassert(!rliza_validate("{\"error\":\"not \\\"aaa\\\" found\","));
char *double_content = "{}{}[]";
free(rliza_loads(&double_content));
rassert(!strcmp(double_content, "{}[]"));
free(rliza_loads(&double_content));
rassert(!strcmp(double_content, "[]"));
char *error_content = "{}*{}";
free(rliza_loads(&error_content));
rassert(!strcmp(error_content, "*{}"));
rliza_loads(&error_content);
rassert(!strcmp(error_content, "*{}"));
rassert(rliza_validate("{}"));
rassert(!rliza_validate("{"));
rassert(!rliza_validate("}"));
rassert(!rliza_validate("["));
rassert(!rliza_validate("]"));
rassert(!rliza_validate("\\"));
rassert(!rliza_validate("*"));
rassert(!rliza_validate("!"));
char *json_contentp = json_content;
rliza_t *to_object = rliza_loads(&json_contentp);
char *to_string = (char *)rliza_dumps(to_object);
rassert(!strcmp(to_string, json_content));
printf("\n<%s>\n", to_string);
printf("<%s>\n", json_content);
free(to_string);
rliza_free(to_object);
// rliza_free(to_object);
rtest_banner("manually building new object");
rliza_t *rliza = rliza_new(RLIZA_OBJECT);
rliza_set_integer(rliza, "a", 1);
rliza_set_integer(rliza, "b", 2);
rliza_set_integer(rliza, "c", 3);
rliza_set_integer(rliza, "d", 4);
rliza_set_integer(rliza, "e", 5);
rliza_set_integer(rliza, "f", 6);
rliza_set_string(rliza, "str1", "str1value");
rliza_set_null(rliza, "q");
char *original_content = rliza_dumps(rliza);
printf("1:%s\n", original_content);
char *content = original_content;
printf("2:%s %d\n", content, content[strlen((char *)content)] == 0);
rliza_t *rliza2 = rliza_loads(&content);
printf("HAAAh\n");
char *content2 = rliza_dumps(rliza2);
printf("HAAAh\n");
content = original_content;
rassert(!(strcmp((char *)content,
(char *)content2))); // strcmp(content,content2);
char *content2p = original_content;
content = original_content;
rliza_t *rliza3 = rliza_loads((char **)&content2p);
char *content3 = rliza_dumps(rliza2);
rtest_banner("compare several serilizations. Should be equal.\n");
content = original_content;
printf("content1:<%s>\n", content);
printf("content2:<%s>\n", content2);
printf("content3:<%s>\n", content3);
rassert(!strncmp(content2, content3, strlen((char *)content2)));
rassert(!strncmp(content, content2, strlen((char *)content)));
rliza_free(rliza2);
rliza_free(rliza3);
free(original_content);
free(content2);
free(content3);
printf("Coalesce %s\n", (char *)rliza_coalesce(rliza_get_string(rliza, "a"), "#1"));
printf("Coalesce %s\n", (char *)rliza_coalesce(rliza_get_string(rliza, "b"), "#2"));
rliza_free(rliza);
return rtest_end("");
}