Files
gencpp/test/c_library/test.c
T

58 lines
2.4 KiB
C

#define GEN_IMPLEMENTATION
#define GEN_DEFINE_LIBRARY_CODE_CONSTANTS
#include "gen_singleheader.h"
gen_global gen_s32 g_failures = 0;
gen_internal void expect(int condition, gen_Str name) {
if (condition == false) { gen_log_fmt("FAIL %S\n", name); ++ g_failures; }
}
gen_internal void expect_fragments(gen_Str text, gen_Str label) {
expect(text.Ptr != 0 && text.Len > 0, label);
expect(gen_str_contains(text, gen_txt("baseline_message")), label);
expect(gen_str_contains(text, gen_txt("char")), label);
expect(gen_str_contains(text, gen_txt("const")), label);
expect(gen_str_contains(text, gen_txt("*")), label);
expect(gen_str_contains(text, gen_txt("GENCPP_BASELINE")), label);
}
gen_internal void expect_variable(gen_CodeVar var, gen_Str label) {
expect(var != 0, label); if (var == 0) return;
expect(var->Type == CT_Variable, label);
expect(gen_str_contains(var->Name, gen_txt("baseline_message")), label);
expect(var->ValueType != 0, label);
expect(var->Value != 0, label);
if (var->Value != 0) {
expect(gen_str_contains(var->Value->Content, gen_txt("GENCPP_BASELINE")), label);
}
}
int main()
{
gen_Context ctx = {0}; gen_init(&ctx);
gen_CodeTypename type = gen_def_type(name(char), .specifiers = gen_def_specifiers(2, Spec_Const, Spec_Ptr) );
gen_CodeVar upfront = gen_def_variable(type, name(baseline_message),
.value = gen_untyped_str(code("\"GENCPP_BASELINE\""))
);
expect_variable(upfront, gen_txt("c11 upfront"));
expect_fragments(gen_strbuilder_to_str(gen_code_to_strbuilder(upfront)), gen_txt("c11 upfront serialized"));
gen_Code untyped = gen_code_str(char const* baseline_message = "GENCPP_BASELINE"; );
expect(untyped != 0, gen_txt("c11 untyped"));
gen_Str untyped_text = gen_strbuilder_to_str(gen_code_to_strbuilder(untyped));
expect_fragments(untyped_text, gen_txt("c11 untyped content"));
expect_variable(gen_parse_variable(untyped_text), gen_txt("c11 untyped reparsed"));
gen_CodeVar parsed = gen_parse_variable(code(char const* baseline_message = "GENCPP_BASELINE"; ));
expect_variable(parsed, gen_txt("c11 parsed"));
expect_fragments(gen_strbuilder_to_str(gen_code_to_strbuilder(parsed)), gen_txt("c11 parsed serialized"));
gen_deinit(&ctx);
if (g_failures != 0) { gen_log_fmt("c11 baseline smoke failed: %d\n", g_failures); return 1; }
gen_log_fmt("c11 baseline smoke passed\n");
return 0;
}