un-inception/tests/test_un_forth.fth
Russell Ballestrini 2b35819393 Initial commit: 42 UN CLI implementations
Unsandbox CLI implementations in 42 programming languages for the
permacomputer project. Public domain software for code execution
across all ecosystems.

Languages: Python, JavaScript, Ruby, Go, Rust, C, C++, Java, Kotlin,
C#, F#, Haskell, OCaml, Clojure, Scheme, Common Lisp, Erlang, Elixir,
D, Nim, Zig, V, Dart, Groovy, Scala, Julia, R, Crystal, Fortran,
COBOL, Prolog, Forth, Tcl, Raku, Lua, PHP, Perl, Bash, TypeScript,
Objective-C, PowerShell, AWK

Includes test suites and service lifecycle tests.
2025-12-23 09:57:08 -05:00

171 lines
4.7 KiB
Forth
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\ Comprehensive tests for un.forth (Forth UN CLI Inception implementation)
\ Run with: gforth test_un_forth.fth
\ Color codes
: green s" \033[32m" type ;
: red s" \033[31m" type ;
: blue s" \033[34m" type ;
: reset s" \033[0m" type ;
\ Test counters
variable passed
variable failed
0 passed !
0 failed !
\ Extension to language mapping (from un.forth)
: ext-lang ( addr len -- addr len | 0 0 )
2dup s" .jl" compare 0= if 2drop s" julia" exit then
2dup s" .r" compare 0= if 2drop s" r" exit then
2dup s" .cr" compare 0= if 2drop s" crystal" exit then
2dup s" .f90" compare 0= if 2drop s" fortran" exit then
2dup s" .cob" compare 0= if 2drop s" cobol" exit then
2dup s" .pro" compare 0= if 2drop s" prolog" exit then
2dup s" .forth" compare 0= if 2drop s" forth" exit then
2dup s" .4th" compare 0= if 2drop s" forth" exit then
2dup s" .py" compare 0= if 2drop s" python" exit then
2dup s" .js" compare 0= if 2drop s" javascript" exit then
2dup s" .rb" compare 0= if 2drop s" ruby" exit then
2dup s" .go" compare 0= if 2drop s" go" exit then
2dup s" .rs" compare 0= if 2drop s" rust" exit then
2dup s" .c" compare 0= if 2drop s" c" exit then
2dup s" .cpp" compare 0= if 2drop s" cpp" exit then
2dup s" .java" compare 0= if 2drop s" java" exit then
2dup s" .sh" compare 0= if 2drop s" bash" exit then
2drop 0 0
;
\ Print test result
: print-test ( addr len result -- )
if
green ." ✓ PASS" reset ." : " type cr
1 passed +!
else
red ." ✗ FAIL" reset ." : " type cr
1 failed +!
then
;
\ Test extension detection
: test-ext ( addr1 len1 addr2 len2 test-name-addr test-name-len -- )
2>r
ext-lang
2dup 0 0 d<>
if
2swap compare 0=
else
2drop 2drop false
then
2r> rot print-test
;
\ Helper to create test name
: make-test-name ( ext-addr ext-len lang-addr lang-len -- name-addr name-len )
here >r
s" Detect " here swap dup >r move here r> +
2swap dup >r move here r> +
s" as " dup >r move here r> +
2swap dup >r move here r> +
r> here over -
;
cr
blue ." ========================================" reset cr
blue ." UN CLI Inception Tests - Forth" reset cr
blue ." ========================================" reset cr cr
\ Test Suite 1: Extension Detection
blue ." Test Suite 1: Extension Detection" reset cr
s" .jl" s" julia" make-test-name >r >r
s" .jl" s" julia" r> r> test-ext
s" .r" s" r" make-test-name >r >r
s" .r" s" r" r> r> test-ext
s" .cr" s" crystal" make-test-name >r >r
s" .cr" s" crystal" r> r> test-ext
s" .f90" s" fortran" make-test-name >r >r
s" .f90" s" fortran" r> r> test-ext
s" .cob" s" cobol" make-test-name >r >r
s" .cob" s" cobol" r> r> test-ext
s" .pro" s" prolog" make-test-name >r >r
s" .pro" s" prolog" r> r> test-ext
s" .forth" s" forth" make-test-name >r >r
s" .forth" s" forth" r> r> test-ext
s" .4th" s" forth" make-test-name >r >r
s" .4th" s" forth" r> r> test-ext
s" .py" s" python" make-test-name >r >r
s" .py" s" python" r> r> test-ext
s" .rs" s" rust" make-test-name >r >r
s" .rs" s" rust" r> r> test-ext
\ Test unknown extension
s" .xyz" ext-lang 0 0 d= if
s" Detect unknown extension" true print-test
else
2drop s" Detect unknown extension" false print-test
then
\ Test Suite 2: API Integration
cr
blue ." Test Suite 2: API Integration" reset cr
blue ." SKIP" reset ." : API integration test (requires runtime environment)" cr
\ Test Suite 3: End-to-End
cr
blue ." Test Suite 3: End-to-End Functional Test" reset cr
blue ." SKIP" reset ." : E2E test (requires runtime environment and API key)" cr
\ Test Suite 4: Error Handling
cr
blue ." Test Suite 4: Error Handling" reset cr
\ Test that unknown returns 0 0
s" .unknown" ext-lang 0 0 d= if
s" Unknown extension returns empty" true print-test
else
2drop s" Unknown extension returns empty" false print-test
then
\ Test multiple extension support
s" .forth" ext-lang 2dup s" forth" compare 0= if
2drop s" Forth extension .forth supported" true print-test
else
2drop s" Forth extension .forth supported" false print-test
then
s" .4th" ext-lang 2dup s" forth" compare 0= if
2drop s" Forth extension .4th supported" true print-test
else
2drop s" Forth extension .4th supported" false print-test
then
\ Print summary
passed @ failed @ + value total
cr
blue ." ========================================" reset cr
blue ." Test Summary" reset cr
blue ." ========================================" reset cr
green ." Passed: " reset passed @ . cr
red ." Failed: " reset failed @ . cr
blue ." Total: " reset total . cr
failed @ 0> if
cr
red ." TESTS FAILED" reset cr
1 (bye)
else
cr
green ." ALL TESTS PASSED" reset cr
0 (bye)
then