END_TEST /* Interning not entirely sorted out yet. Not sure * how it will all work */ /* UPDATE: Interning now based on a global khash table */ START_TEST (test_symbol_intern) { XR a = xr_sym("identical"); XR b = xr_sym("identical"); fail_unless(a == b); }
XR xr_sym_n(const char *str, size_t len) { char buf[64]; strncpy(buf, str, 64); buf[len] = '\0'; return xr_sym(buf); }
END_TEST START_TEST (test_symbol_string) { XR sym = xr_sym("symbol"); XR str = send(sym, s_string); fail_unless(qsend(str, "eq", xr_str("symbol")) == VAL_TRUE); }
int main(int argc, char **argv) { xr_init(); bool eval = false; bool verbose = false; int c; while ((c = getopt(argc, argv, "ev")) != -1) { switch (c) { case 'e': eval = true; break; case 'v': verbose = true; break; } } XR obj_list; if (optind < argc) { char *file = argv[optind]; obj_list = xr_parse_dump_file(file); } else { obj_list = xr_parse_dump_from_stdin(); } if (verbose) log("# Objs: %ld\n", xrListLen(obj_list)); XR root_mt = xrMTable(root); assert(root_mt); /* Lookup the "init" method */ XR init_m = xrClosureAt(send(root_mt, s_at, xr_sym("init")), 0); if (verbose) qsend(init_m, "show"); if (!eval) { FILE *fp = fopen("blahtestsymfile", "w"); qsend(root, "pack", fp); fclose(fp); return 0; } if (verbose) log("##############\nRunning VM\n##############\n"); xr_run_method(init_m); return 0; }
END_TEST /* START_TEST (test_symbol_pack_unpack) { XR foo = xr_sym("foo"); FILE *fp = fopen("test_symbol_pack.tmp", "w"); qsend( } END_TEST */ START_TEST (test_symbol_literal) { XR sym = xr_sym("symbol"); XR lit = send(sym, s_literal); fail_unless(qsend(lit, "eq", xr_str(":symbol")) == VAL_TRUE); }