|
#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("");
|
|
}
|