58 lines
2.4 KiB
C
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;
|
|
}
|