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.
171 lines
4.7 KiB
Forth
171 lines
4.7 KiB
Forth
\ 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
|