28#define SYMBOL_TESTS(X) \
29 X("symbol::make", test_symbol_make), X("symbol::intern_symbol", test_symbol_intern), \
30 X("symbol::gensym", test_gensym), X("symbol::gensym_freshness", test_gensym_freshness)
#define TEST_ASSERT(cond)
#define RELEASE_CONTEXT(x)
#define SHUTDOWN_ENGINE(mm, engine)
#define MAKE_ENGINE(mm, engine)
#define MAKE_CONTEXT(engine, x)
srn_metadata_t absurd_metadata
We use this for testing. Defined once in core.c.
#define AS_SYMBOL(value_ref)
#define AS_STRING(value_ref)
#define IS_A(value_ref, field)
#define IS_TRUE(value_ref)
srn_namespace_t * srn_namespace_get_or_create(srn_engine_t *engine, srn_string_t *name, srn_error_t **err)
Create a new and empty namespace if it is not already created in the engine, if it exists,...
A namespace is an isolation for names nad technically a compilation unit.
srn_value_t * srn_value_eq(const srn_context_t *ctx, const srn_value_t *a, const srn_value_t *b)
Check to values for equality. Return a boolean.
srn_value_t * srn_string_make(srn_context_t *ctx, srn_metadata_t *metadata, const char *src)
Create a string from a null terminated C string.
bool srn_string_eq(const srn_string_t *a, const srn_string_t *b)
srn_engine_t * engine
Long term state of the compiler.
A runtime error, a tag classifying the failure and a human-readable message.
static void test_gensym_freshness()
static srn_namespace_t * make_test_ns(srn_context_t *ctx)
static void test_gensym()
static void test_symbol_intern()
static size_t sym_table_len(srn_namespace_t *ns)
static void test_symbol_make()
srn_value_t * srn_symbol_make(srn_context_t *ctx, srn_metadata_t *metadata, srn_namespace_t *ns, srn_string_t *name)
Create a new symbol. IT DOES NOT INTERNALIZE THE SYMBOL.
srn_value_t * srn_symbol_intern(srn_context_t *ctx, srn_metadata_t *metadata, srn_namespace_t *ns, srn_string_t *symbol_name)
srn_value_t * srn_symbol_gen(srn_context_t *ctx, srn_metadata_t *metadata, srn_namespace_t *ns, srn_string_t *optional_name)