un-inception/tests/README.md
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

366 lines
9.1 KiB
Markdown

# UN CLI Inception Tests
Comprehensive test suites for the UN CLI implementations in all 42+ languages.
## Quick Start - Master Test Runner
The easiest way to run tests for ALL implementations:
```bash
cd /home/fox/git/unsandbox.com/cli/inception/tests
# Run all tests (unit, integration, functional)
./run_all_tests.sh
# Run only unit tests (no API key required)
./run_all_tests.sh --unit
# Run only integration tests (requires API key)
./run_all_tests.sh --integration
# Run only functional tests (requires API key)
./run_all_tests.sh --functional
# Run multiple test types
./run_all_tests.sh --unit --integration
```
The master test runner:
- Tests all 42 language implementations automatically
- Handles missing interpreters gracefully (skips with warning)
- Provides color-coded summary table
- Shows timing and detailed pass/fail/skip counts
- Exits with code 0 only if ALL tests pass
## Test Files
### Master Test Runner
- `run_all_tests.sh` - Comprehensive test runner for ALL implementations (RECOMMENDED)
### Scripting Languages
- `test_un_sh.sh` - Bash UN CLI tests
- `test_un_tcl.tcl` - TCL UN CLI tests
- `test_un_raku.raku` - Raku UN CLI tests
- `test_un_py.py` - Python UN CLI tests
- `test_un_rb.rb` - Ruby UN CLI tests
- `test_un_pl.pl` - Perl UN CLI tests
- `test_un_lua.lua` - Lua UN CLI tests
- `test_un_php.php` - PHP UN CLI tests
- `test_un_js.js` - JavaScript (Node.js) UN CLI tests
- `test_un_ts.ts` - TypeScript (Node.js) UN CLI tests
- `test_un_deno.ts` - Deno TypeScript UN CLI tests
- `test_un_groovy.groovy` - Groovy UN CLI tests
### Functional Languages
- `test_un_hs.hs` - Haskell UN CLI tests
- `test_un_ml.ml` - OCaml UN CLI tests
- `test_un_clj.clj` - Clojure UN CLI tests
- `test_un_scm.scm` - Scheme (Guile) UN CLI tests
- `test_un_lisp.lisp` - Common Lisp (SBCL) UN CLI tests
- `test_un_erl.erl` - Erlang UN CLI tests
- `test_un_ex.exs` - Elixir UN CLI tests
### Systems Languages
- `test_un_c.c` - C UN CLI tests
- `test_un_cpp.cpp` - C++ UN CLI tests
- `test_un_go.go` - Go UN CLI tests
- `test_un_rs.rs` - Rust UN CLI tests
- `test_un_zig.zig` - Zig UN CLI tests
- `test_un_d.d` - D UN CLI tests
- `test_un_nim.nim` - Nim UN CLI tests
- `test_un_cr.cr` - Crystal UN CLI tests
- `test_un_v.v` - V UN CLI tests
- `test_un_m.sh` - Objective-C UN CLI tests (shell wrapper)
### JVM Languages
- `TestUn.java` - Java UN CLI tests
- `TestUn.cs` - C# UN CLI tests
- `test_un_kt.kt` - Kotlin UN CLI tests
- `test_un_fs.fs` - F# UN CLI tests
### Scientific/Specialized Languages
- `test_un_jl.jl` - Julia UN CLI tests
- `test_un_r.r` - R UN CLI tests
- `test_un_dart.dart` - Dart UN CLI tests
- `test_un_f90.f90` - Fortran UN CLI tests
- `test_un_cob.sh` - COBOL UN CLI tests (shell wrapper)
- `test_un_pro.pro` - Prolog UN CLI tests
- `test_un_forth.fth` - Forth UN CLI tests
## What Each Test Suite Covers
Each test file includes three types of tests:
1. **Unit Tests** - Extension detection logic
- Tests that 10+ file extensions map to correct language identifiers
- Ensures `.hs``"haskell"`, `.py``"python"`, etc.
2. **Integration Tests** - API connectivity
- Creates a simple test file and runs it through the UN CLI
- Verifies the CLI can reach `api.unsandbox.com` and execute code
- Skipped if `UNSANDBOX_API_KEY` environment variable is not set
3. **Functional Tests** - End-to-end execution
- Runs the corresponding `fib.*` file from `../test/`
- Verifies output contains `"fib(10) = 55"`
- Tests the full workflow: file reading → API call → output display
- Skipped if `UNSANDBOX_API_KEY` environment variable is not set
## Prerequisites
### General
- Set `UNSANDBOX_API_KEY` environment variable to run integration/functional tests
- Run tests from `/home/fox/git/unsandbox.com/cli/inception/` directory
### Language-Specific Dependencies
**Haskell** (`test_un_hs.hs`):
```bash
# Install dependencies
cabal install --lib aeson http-conduit bytestring text
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
./tests/test_un_hs.hs
```
**OCaml** (`test_un_ml.ml`):
```bash
# Install dependencies
opam install cohttp-lwt-unix yojson
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
ocaml tests/test_un_ml.ml
```
**Clojure** (`test_un_clj.clj`):
```bash
# Install Clojure CLI tools
# Dependencies: clj-http, cheshire
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
clj -Sdeps '{:deps {clj-http/clj-http {:mvn/version "3.12.3"} cheshire/cheshire {:mvn/version "5.11.0"}}}' -M tests/test_un_clj.clj
```
**Scheme** (`test_un_scm.scm`):
```bash
# Install Guile and dependencies
sudo apt-get install guile-3.0 guile-json
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
./tests/test_un_scm.scm
```
**Common Lisp** (`test_un_lisp.lisp`):
```bash
# Install SBCL and Quicklisp
# In SBCL: (ql:quickload '(:dexador :jonathan))
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
sbcl --script tests/test_un_lisp.lisp
```
**Erlang** (`test_un_erl.erl`):
```bash
# Install Erlang/OTP (includes inets, ssl)
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
escript tests/test_un_erl.erl
```
**Elixir** (`test_un_ex.exs`):
```bash
# Elixir comes with standard library support
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
elixir tests/test_un_ex.exs
```
**Julia** (`test_un_jl.jl`):
```bash
# Install dependencies
julia -e 'using Pkg; Pkg.add("HTTP"); Pkg.add("JSON")'
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
julia tests/test_un_jl.jl
```
**R** (`test_un_r.r`):
```bash
# Install dependencies
R -e 'install.packages(c("httr", "jsonlite"), repos="https://cran.rstudio.com/")'
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
Rscript tests/test_un_r.r
```
**Crystal** (`test_un_cr.cr`):
```bash
# Crystal stdlib includes HTTP and JSON support
# Run tests (interpreted)
cd /home/fox/git/unsandbox.com/cli/inception/
crystal tests/test_un_cr.cr
# Or compile first for faster execution
crystal build tests/test_un_cr.cr -o test_un_cr
./test_un_cr
```
**Fortran** (`test_un_f90.f90`):
```bash
# Compile with gfortran
cd /home/fox/git/unsandbox.com/cli/inception/
gfortran -o test_un_f90 tests/test_un_f90.f90
# Run tests
./test_un_f90
rm test_un_f90
```
**COBOL** (`test_un_cob.sh`):
```bash
# Install GnuCOBOL
sudo apt-get install gnucobol # Ubuntu/Debian
# or
sudo dnf install gnucobol # Fedora
# Run tests (shell wrapper)
cd /home/fox/git/unsandbox.com/cli/inception/
bash tests/test_un_cob.sh
```
**Prolog** (`test_un_pro.pro`):
```bash
# Install SWI-Prolog
sudo apt-get install swi-prolog
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
swipl -g main -t halt tests/test_un_pro.pro
```
**Forth** (`test_un_forth.fth`):
```bash
# Install Gforth
sudo apt-get install gforth
# Run tests
cd /home/fox/git/unsandbox.com/cli/inception/
gforth tests/test_un_forth.fth
```
## Running All Tests
```bash
cd /home/fox/git/unsandbox.com/cli/inception/
# Export API key (required for integration/functional tests)
export UNSANDBOX_API_KEY="your_api_key_here"
# Run each test suite
echo "=== Haskell ==="
./tests/test_un_hs.hs
echo ""
echo "=== OCaml ==="
ocaml tests/test_un_ml.ml
echo ""
echo "=== Clojure ==="
clj -Sdeps '{:deps {clj-http/clj-http {:mvn/version "3.12.3"} cheshire/cheshire {:mvn/version "5.11.0"}}}' -M tests/test_un_clj.clj
echo ""
echo "=== Scheme ==="
./tests/test_un_scm.scm
echo ""
echo "=== Common Lisp ==="
sbcl --script tests/test_un_lisp.lisp
echo ""
echo "=== Erlang ==="
escript tests/test_un_erl.erl
echo ""
echo "=== Elixir ==="
elixir tests/test_un_ex.exs
echo ""
echo "=== Julia ==="
julia tests/test_un_jl.jl
echo ""
echo "=== R ==="
Rscript tests/test_un_r.r
echo ""
echo "=== Crystal ==="
crystal tests/test_un_cr.cr
echo ""
echo "=== Fortran ==="
gfortran -o test_un_f90 tests/test_un_f90.f90 && ./test_un_f90 && rm test_un_f90
echo ""
echo "=== COBOL ==="
bash tests/test_un_cob.sh
echo ""
echo "=== Prolog ==="
swipl -g main -t halt tests/test_un_pro.pro
echo ""
echo "=== Forth ==="
gforth tests/test_un_forth.fth
```
## Test Output
Each test suite produces color-coded output:
- **Green ✓ PASS** - Test passed successfully
- **Red ✗ FAIL** - Test failed with error message
- **Yellow ⚠ WARNING** - API key not set, some tests skipped
Example output:
```
=== Haskell UN CLI Test Suite ===
✓ PASS - Extension detection
✓ PASS - API integration
✓ PASS - Fibonacci end-to-end test
✓ All tests passed (3/3)
```
## Exit Codes
- `0` - All tests passed
- `1` - One or more tests failed
## Debugging Failed Tests
If a test fails:
1. Check that you're running from the correct directory (`/home/fox/git/unsandbox.com/cli/inception/`)
2. Verify `UNSANDBOX_API_KEY` is set correctly
3. Ensure the UN CLI implementation (`un.hs`, `un.ml`, etc.) is in the parent directory
4. Check that test files exist in `../test/` (e.g., `fib.hs`, `fib.ml`)
5. Review the error message - tests provide detailed failure information
## Implementation Notes
- Tests use the same extension-to-language mapping as the UN CLI implementations
- API tests create temporary files in `/tmp/`
- Tests verify both success (exit code 0) and expected output content
- Fibonacci tests specifically look for the string `"fib(10) = 55"` in output
- All tests are self-contained and can run independently