123456789101112131415161718192021222324252627282930313233343536373839404142 | defaults := use ./_defaults.tm
vectors := use ./_vectors.tm
use ./use_import.tm
func returns_vec(->vectors.Vec2)
return vectors.Vec2{1, 2}
func returns_imported_type(->ImportedType)
return get_value() # Imported from ./use_import.tm
test "using an imported module"
>> empty : [vectors.Vec2]
>> empty
assert empty == []
>> returns_vec()
assert returns_vec() == vectors.Vec2{x=1, y=2}
test "importing a type"
>> imported : [ImportedType]
>> imported
assert imported == []
>> returns_imported_type()
assert returns_imported_type() == ImportedType{"Hello"}
test "imported global initialization"
>> needs_initializing
assert needs_initializing == 999999999999999999
MODULE_DEFAULT := 999
test "default values resolve in the module that wrote them"
# `defaults.tm` defines its own `MODULE_DEFAULT` as 42. Both kinds of
# default are stored unevaluated and recompiled at the call site, so
# without resolving them against their own file they would either pick up
# the 999 above or fail to compile at all:
assert MODULE_DEFAULT == 999
>> defaults.with_arg_default()
assert defaults.with_arg_default() == 42
assert defaults.with_arg_default(1) == 1
>> defaults.with_table_default()[999]
assert defaults.with_table_default()[999] == 42
assert defaults.with_table_default()[1] == 1
|