@ -12,18 +12,14 @@
;; Post references resolved hook find-add-tests will create a main function and call test functions
( defun-comptime find-add-tests ( environment ( & EvaluatorEnvironment )
was-code-modified ( & bool ) &return bool )
was-code-modified ( & bool ) &return bool )
( var functions-to-test ( <> std::vector ( <> std::pair std::string ( * ( const Token ) ) ) ) )
( var required-imports ( <> std::vector ( <> std::pair ( * ( const char ) ) ( * ( const Token ) ) ) ) )
( for-in definition-pair ( & ObjectDefinitionPair ) ( field environment definitions )
( unless ( != ( in std string npos ) ( call-on find ( field definition-pair first ) "test--" ) )
( continue ) )
( call-on push_back functions-to-test ( call ( in std make_pair )
( field definition-pair first )
( field definition-pair second definitionInvocation ) ) )
( call-on push_back required-imports ( call ( in std make_pair )
( path definition-pair . second . definitionInvocation > source )
( field definition-pair second definitionInvocation ) ) ) )
( field definition-pair second definitionInvocation ) ) ) )
( get-or-create-comptime-var total-tests-found int )
;; No more tests found this round. Exit, otherwise we'll get in an infinite modification loop
@ -34,12 +30,22 @@
;; We're copying this to the main def, so it's fine if it gets destroyed
( var test-body ( <> std::vector Token ) )
( var main-definition ( * ( <> std::vector Token ) ) ( new ( <> std::vector Token ) ) )
( call-on push_back ( field environment comptimeTokens ) main-definition )
( for-in function-pair ( & ( <> std::pair std::string ( * ( const Token ) ) ) ) functions-to-test
( var function-name-token Token ( deref ( field function-pair second ) ) )
( set ( field function-name-token type ) TokenType_Symbol )
( set ( field function-name-token contents ) ( field function-pair first ) )
( var function-name-string-token Token function-name-token )
( set ( field function-name-string-token type ) TokenType_String )
;; Forward-declare test for the compiler. This helps us avoid having to import the test's
;; module into AutoTest
( tokenize-push ( deref main-definition )
( declare-extern-function ( token-splice-addr function-name-token ) ( &return int ) ) )
( tokenize-push test-body
( fprintf stderr "\n------------- %s\n" ( token-splice-addr
function-name-string-token ) )
@ -50,16 +56,6 @@
function-name-string-token ) )
( return 1 ) ) ) )
( var main-definition ( * ( <> std::vector Token ) ) ( new ( <> std::vector Token ) ) )
( call-on push_back ( field environment comptimeTokens ) main-definition )
( for-in import-pair ( & ( <> std::pair ( * ( const char ) ) ( * ( const Token ) ) ) ) required-imports
( var import-str Token ( deref ( field import-pair second ) ) )
( set ( field import-str type ) TokenType_String )
( set ( field import-str contents ) ( field import-pair first ) )
( tokenize-push ( deref main-definition )
( import ( token-splice-addr import-str ) ) ) )
( tokenize-push ( deref main-definition )
( defun main ( &return int )
( var num-errors int 0 )