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.
This commit is contained in:
Russell Ballestrini 2025-12-23 09:57:08 -05:00
commit 2b35819393
143 changed files with 30022 additions and 0 deletions

13
test/fib.c Normal file
View file

@ -0,0 +1,13 @@
#include <stdio.h>
int fib(int n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
int main() {
for (int i = 0; i <= 10; i++) {
printf("fib(%d) = %d\n", i, fib(i));
}
return 0;
}

7
test/fib.clj Normal file
View file

@ -0,0 +1,7 @@
(defn fib [n]
(if (<= n 1)
n
(+ (fib (- n 1)) (fib (- n 2)))))
(doseq [i (range 11)]
(println (str "fib(" i ") = " (fib i))))

32
test/fib.cob Normal file
View file

@ -0,0 +1,32 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. FIBONACCI.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 99 VALUE 0.
01 J PIC 99 VALUE 0.
01 N-STR PIC X(4).
01 VAL-STR PIC X(4).
01 FIB-ARRAY.
05 FIB-VALS PIC 9999 OCCURS 11 TIMES.
PROCEDURE DIVISION.
MAIN-LOGIC.
MOVE 0 TO FIB-VALS(1).
MOVE 1 TO FIB-VALS(2).
PERFORM VARYING I FROM 3 BY 1 UNTIL I > 11
COMPUTE FIB-VALS(I) = FIB-VALS(I - 1) + FIB-VALS(I - 2)
END-PERFORM.
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 11
COMPUTE I = J - 1
MOVE I TO N-STR
INSPECT N-STR REPLACING LEADING "0" BY " "
MOVE FIB-VALS(J) TO VAL-STR
INSPECT VAL-STR REPLACING LEADING "0" BY " "
DISPLAY "fib(" FUNCTION TRIM(N-STR) ") = "
FUNCTION TRIM(VAL-STR)
END-PERFORM.
STOP RUN.

13
test/fib.cpp Normal file
View file

@ -0,0 +1,13 @@
#include <iostream>
int fib(int n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
int main() {
for (int i = 0; i <= 10; i++) {
std::cout << "fib(" << i << ") = " << fib(i) << std::endl;
}
return 0;
}

8
test/fib.cr Normal file
View file

@ -0,0 +1,8 @@
def fib(n)
return n if n <= 1
fib(n-1) + fib(n-2)
end
(0..10).each do |i|
puts "fib(#{i}) = #{fib(i)}"
end

14
test/fib.cs Normal file
View file

@ -0,0 +1,14 @@
using System;
class Program {
static int Fib(int n) {
if (n <= 1) return n;
return Fib(n-1) + Fib(n-2);
}
static void Main() {
for (int i = 0; i <= 10; i++) {
Console.WriteLine($"fib({i}) = {Fib(i)}");
}
}
}

12
test/fib.d Normal file
View file

@ -0,0 +1,12 @@
import std.stdio;
int fib(int n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
void main() {
foreach (i; 0 .. 11) {
writefln("fib(%d) = %d", i, fib(i));
}
}

10
test/fib.dart Normal file
View file

@ -0,0 +1,10 @@
int fib(int n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
void main() {
for (int i = 0; i <= 10; i++) {
print('fib($i) = ${fib(i)}');
}
}

10
test/fib.erl Normal file
View file

@ -0,0 +1,10 @@
-module(fib).
-export([main/1]).
fib(N) when N =< 1 -> N;
fib(N) -> fib(N-1) + fib(N-2).
main(_) ->
lists:foreach(fun(I) ->
io:format("fib(~p) = ~p~n", [I, fib(I)])
end, lists:seq(0, 10)).

12
test/fib.ex Normal file
View file

@ -0,0 +1,12 @@
defmodule Fib do
def fib(n) when n <= 1, do: n
def fib(n), do: fib(n-1) + fib(n-2)
def main do
Enum.each(0..10, fn i ->
IO.puts("fib(#{i}) = #{fib(i)}")
end)
end
end
Fib.main()

20
test/fib.f90 Normal file
View file

@ -0,0 +1,20 @@
program fibonacci
implicit none
integer :: i
do i = 0, 10
print '(A,I0,A,I0)', 'fib(', i, ') = ', fib(i)
end do
contains
recursive function fib(n) result(res)
integer, intent(in) :: n
integer :: res
if (n <= 1) then
res = n
else
res = fib(n-1) + fib(n-2)
end if
end function fib
end program fibonacci

16
test/fib.forth Normal file
View file

@ -0,0 +1,16 @@
: fib ( n -- fib )
dup 2 < if exit then
dup 1 - recurse
swap 2 - recurse
+ ;
: print-fib ( n -- )
dup ." fib(" 0 .r ." ) = " fib 0 .r cr ;
: main
11 0 do
i print-fib
loop ;
main
bye

6
test/fib.fs Normal file
View file

@ -0,0 +1,6 @@
let rec fib n =
if n <= 1 then n
else fib(n-1) + fib(n-2)
for i in 0 .. 10 do
printfn "fib(%d) = %d" i (fib i)

16
test/fib.go Normal file
View file

@ -0,0 +1,16 @@
package main
import "fmt"
func fib(n int) int {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}
func main() {
for i := 0; i <= 10; i++ {
fmt.Printf("fib(%d) = %d\n", i, fib(i))
}
}

9
test/fib.groovy Normal file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env groovy
def fib(n) {
if (n <= 1) return n
return fib(n-1) + fib(n-2)
}
(0..10).each { i ->
println "fib($i) = ${fib(i)}"
}

7
test/fib.hs Normal file
View file

@ -0,0 +1,7 @@
fib :: Int -> Int
fib n
| n <= 1 = n
| otherwise = fib (n-1) + fib (n-2)
main :: IO ()
main = mapM_ (\i -> putStrLn $ "fib(" ++ show i ++ ") = " ++ show (fib i)) [0..10]

12
test/fib.java Normal file
View file

@ -0,0 +1,12 @@
public class fib {
static int fib(int n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
System.out.println("fib(" + i + ") = " + fib(i));
}
}
}

11
test/fib.jl Normal file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env julia
function fib(n)
if n <= 1
return n
end
return fib(n-1) + fib(n-2)
end
for i in 0:10
println("fib($i) = $(fib(i))")
end

9
test/fib.js Normal file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env node
function fib(n) {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
for (let i = 0; i <= 10; i++) {
console.log(`fib(${i}) = ${fib(i)}`);
}

10
test/fib.kt Normal file
View file

@ -0,0 +1,10 @@
fun fib(n: Int): Int {
if (n <= 1) return n
return fib(n-1) + fib(n-2)
}
fun main() {
for (i in 0..10) {
println("fib($i) = ${fib(i)}")
}
}

7
test/fib.lisp Normal file
View file

@ -0,0 +1,7 @@
(defun fib (n)
(if (<= n 1)
n
(+ (fib (- n 1)) (fib (- n 2)))))
(loop for i from 0 to 10
do (format t "fib(~d) = ~d~%" i (fib i)))

10
test/fib.lua Normal file
View file

@ -0,0 +1,10 @@
function fib(n)
if n <= 1 then
return n
end
return fib(n - 1) + fib(n - 2)
end
for i = 0, 10 do
print(string.format("fib(%d) = %d", i, fib(i)))
end

16
test/fib.m Normal file
View file

@ -0,0 +1,16 @@
#include <stdio.h>
int fib(int n) {
if (n <= 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
int main(void) {
int i;
for (i = 0; i <= 10; i++) {
printf("fib(%d) = %d\n", i, fib(i));
}
return 0;
}

8
test/fib.ml Normal file
View file

@ -0,0 +1,8 @@
let rec fib n =
if n <= 1 then n
else fib (n-1) + fib (n-2)
let () =
for i = 0 to 10 do
Printf.printf "fib(%d) = %d\n" i (fib i)
done

7
test/fib.nim Normal file
View file

@ -0,0 +1,7 @@
proc fib(n: int): int =
if n <= 1:
return n
return fib(n-1) + fib(n-2)
for i in 0..10:
echo "fib(", i, ") = ", fib(i)

11
test/fib.php Normal file
View file

@ -0,0 +1,11 @@
<?php
function fib($n) {
if ($n <= 1) {
return $n;
}
return fib($n - 1) + fib($n - 2);
}
for ($i = 0; $i <= 10; $i++) {
echo "fib($i) = " . fib($i) . "\n";
}

10
test/fib.pl Normal file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env perl
sub fib {
my $n = shift;
return $n if $n <= 1;
return fib($n-1) + fib($n-2);
}
for my $i (0..10) {
print "fib($i) = " . fib($i) . "\n";
}

21
test/fib.pro Normal file
View file

@ -0,0 +1,21 @@
% Prolog Fibonacci
fib(0, 0).
fib(1, 1).
fib(N, F) :-
N > 1,
N1 is N - 1,
N2 is N - 2,
fib(N1, F1),
fib(N2, F2),
F is F1 + F2.
print_fib(N) :-
fib(N, F),
format('fib(~w) = ~w~n', [N, F]).
main :-
forall(between(0, 10, N), print_fib(N)),
halt.
:- initialization(main).

8
test/fib.py Normal file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env python3
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
for i in range(11):
print(f"fib({i}) = {fib(i)}")

9
test/fib.r Normal file
View file

@ -0,0 +1,9 @@
#!/usr/bin/Rscript
fib <- function(n) {
if (n <= 1) return(n)
return(fib(n-1) + fib(n-2))
}
for (i in 0:10) {
cat(sprintf("fib(%d) = %d\n", i, fib(i)))
}

10
test/fib.raku Normal file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env raku
sub fib(Int $n) returns Int {
return $n if $n <= 1;
return fib($n - 1) + fib($n - 2);
}
for 0..10 -> $i {
say "fib($i) = {fib($i)}";
}

9
test/fib.rb Normal file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env ruby
def fib(n)
return n if n <= 1
fib(n-1) + fib(n-2)
end
(0..10).each do |i|
puts "fib(#{i}) = #{fib(i)}"
end

12
test/fib.rs Normal file
View file

@ -0,0 +1,12 @@
fn fib(n: u32) -> u32 {
if n <= 1 {
return n;
}
fib(n-1) + fib(n-2)
}
fn main() {
for i in 0..=10 {
println!("fib({}) = {}", i, fib(i));
}
}

8
test/fib.scm Normal file
View file

@ -0,0 +1,8 @@
(define (fib n)
(if (<= n 1)
n
(+ (fib (- n 1)) (fib (- n 2)))))
(do ((i 0 (+ i 1)))
((> i 10))
(display (string-append "fib(" (number->string i) ") = " (number->string (fib i)) "\n")))

15
test/fib.sh Normal file
View file

@ -0,0 +1,15 @@
#!/bin/bash
fib() {
local n=$1
if [ $n -le 1 ]; then
echo $n
return
fi
local a=$(fib $((n-1)))
local b=$(fib $((n-2)))
echo $((a + b))
}
for i in {0..10}; do
echo "fib($i) = $(fib $i)"
done

12
test/fib.tcl Normal file
View file

@ -0,0 +1,12 @@
#!/usr/bin/env tclsh
proc fib {n} {
if {$n <= 1} {
return $n
}
return [expr {[fib [expr {$n - 1}]] + [fib [expr {$n - 2}]]}]
}
for {set i 0} {$i <= 10} {incr i} {
puts "fib($i) = [fib $i]"
}

8
test/fib.ts Normal file
View file

@ -0,0 +1,8 @@
function fib(n: number): number {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
for (let i = 0; i <= 10; i++) {
console.log(`fib(${i}) = ${fib(i)}`);
}

12
test/fib.v Normal file
View file

@ -0,0 +1,12 @@
fn fib(n int) int {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}
fn main() {
for i in 0..11 {
println('fib($i) = ${fib(i)}')
}
}

14
test/fib.zig Normal file
View file

@ -0,0 +1,14 @@
const std = @import("std");
fn fib(n: u32) u32 {
if (n <= 1) return n;
return fib(n-1) + fib(n-2);
}
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
var i: u32 = 0;
while (i <= 10) : (i += 1) {
try stdout.print("fib({d}) = {d}\n", .{i, fib(i)});
}
}

247
test/run_tests.sh Executable file
View file

@ -0,0 +1,247 @@
#!/bin/bash
# Test runner for the 'un' CLI client
# Runs all Fibonacci test programs and verifies output
# Automatically delays between tests to respect API rate limits (7 req/min)
set -e
cd "$(dirname "$0")"
# Expected output for fib(0) through fib(10)
EXPECTED="fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
fib(5) = 5
fib(6) = 8
fib(7) = 13
fib(8) = 21
fib(9) = 34
fib(10) = 55"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check if UNSANDBOX_API_KEY is set
if [ -z "$UNSANDBOX_API_KEY" ]; then
echo -e "${RED}Error: UNSANDBOX_API_KEY environment variable not set${NC}"
echo "Please set it with: export UNSANDBOX_API_KEY=usk_your_key_here"
exit 1
fi
# Check if un binary exists
if [ ! -f "../un" ]; then
echo -e "${RED}Error: 'un' binary not found${NC}"
echo "Please build it first with: make un"
exit 1
fi
UN="../un"
echo "Starting test suite for 'un' CLI client..."
echo ""
TOTAL=0
PASSED=0
FAILED=0
SKIPPED=0
RATE_LIMITED=0
REQUEST_COUNT=0
DELAY_SECONDS=9 # 7 requests/minute = ~8.6s between requests, use 9s to be safe
# Arrays to store timing data
declare -a TIMINGS
declare -a LANGUAGES
declare -a STATUSES
# Test all fib.* files
for file in fib.*; do
TOTAL=$((TOTAL + 1))
ext="${file##*.}"
echo -n "Testing $file ($ext)... "
# Add delay after every request (except the first)
if [ $REQUEST_COUNT -gt 0 ]; then
echo -n "(waiting ${DELAY_SECONDS}s) "
sleep $DELAY_SECONDS
fi
REQUEST_COUNT=$((REQUEST_COUNT + 1))
# Run the test and measure time
START_TIME=$(date +%s%N)
OUTPUT=$($UN "$file" 2>&1 || true)
END_TIME=$(date +%s%N)
# Calculate execution time in milliseconds
EXEC_TIME=$(( (END_TIME - START_TIME) / 1000000 ))
# Check for rate limiting
if echo "$OUTPUT" | grep -q "rate_limit_exceeded"; then
echo -e "${YELLOW}RATE LIMITED${NC} (${EXEC_TIME}ms)"
RATE_LIMITED=$((RATE_LIMITED + 1))
TIMINGS+=("$EXEC_TIME")
LANGUAGES+=("$ext")
STATUSES+=("rate_limited")
continue
fi
# Check if execution was successful
if echo "$OUTPUT" | grep -q "Error:"; then
echo -e "${YELLOW}SKIPPED${NC} (${EXEC_TIME}ms)"
echo " Output: $OUTPUT"
SKIPPED=$((SKIPPED + 1))
TIMINGS+=("$EXEC_TIME")
LANGUAGES+=("$ext")
STATUSES+=("skipped")
continue
fi
# Verify output matches expected
if echo "$OUTPUT" | grep -qF "$EXPECTED"; then
echo -e "${GREEN}PASS${NC} (${EXEC_TIME}ms)"
PASSED=$((PASSED + 1))
TIMINGS+=("$EXEC_TIME")
LANGUAGES+=("$ext")
STATUSES+=("passed")
else
echo -e "${RED}FAIL${NC} (${EXEC_TIME}ms)"
echo " Expected:"
echo "$EXPECTED" | sed 's/^/ /'
echo " Got:"
echo "$OUTPUT" | sed 's/^/ /'
FAILED=$((FAILED + 1))
TIMINGS+=("$EXEC_TIME")
LANGUAGES+=("$ext")
STATUSES+=("failed")
fi
done
echo ""
echo "=========================="
echo "Test Results:"
echo " Total: $TOTAL"
echo -e " ${GREEN}Passed: $PASSED${NC}"
echo -e " ${RED}Failed: $FAILED${NC}"
echo -e " ${YELLOW}Skipped: $SKIPPED${NC}"
echo -e " ${YELLOW}Rate Limited: $RATE_LIMITED${NC}"
echo "=========================="
if [ $RATE_LIMITED -gt 0 ]; then
echo ""
echo -e "${YELLOW}Note: $RATE_LIMITED tests were still rate limited despite delays.${NC}"
echo "Consider using a higher tier API key for faster testing."
fi
# Generate DOT file for visualization BEFORE exiting
echo ""
echo "Generating timing chart..."
DOT_FILE="timing_chart.dot"
cat > "$DOT_FILE" << 'EOF'
digraph TimingChart {
rankdir=LR;
node [shape=plaintext];
graph [fontname="monospace", fontsize=10];
node [fontname="monospace", fontsize=9];
title [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0">
<TR><TD COLSPAN="2"><B>Unsandbox Language Execution Times</B></TD></TR>
<TR><TD COLSPAN="2">Fibonacci(10) benchmark across 39 languages</TD></TR>
</TABLE>>];
chart [label=<
<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="LEFT"><B>Language</B></TD>
<TD ALIGN="LEFT"><B>Time (ms)</B></TD>
<TD ALIGN="LEFT" WIDTH="400"><B>Bar Chart</B></TD>
<TD ALIGN="LEFT"><B>Status</B></TD>
</TR>
EOF
# Find max time for scaling
MAX_TIME=0
for time in "${TIMINGS[@]}"; do
if [ "$time" -gt "$MAX_TIME" ]; then
MAX_TIME=$time
fi
done
# Add each language's data
for i in "${!LANGUAGES[@]}"; do
lang="${LANGUAGES[$i]}"
time="${TIMINGS[$i]}"
status="${STATUSES[$i]}"
# Calculate bar width (max 400 pixels)
if [ "$MAX_TIME" -gt 0 ]; then
bar_width=$(( time * 400 / MAX_TIME ))
else
bar_width=0
fi
# Color based on status
case "$status" in
"passed")
color="#4CAF50"
status_text="✓ PASS"
;;
"failed")
color="#F44336"
status_text="✗ FAIL"
;;
"rate_limited")
color="#FFC107"
status_text="⚠ RATE"
;;
"skipped")
color="#9E9E9E"
status_text="○ SKIP"
;;
esac
cat >> "$DOT_FILE" << EOF
<TR>
<TD ALIGN="LEFT"><B>$lang</B></TD>
<TD ALIGN="RIGHT">${time}</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="$bar_width" HEIGHT="12" BGCOLOR="$color"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="$color">$status_text</FONT></TD>
</TR>
EOF
done
cat >> "$DOT_FILE" << 'EOF'
</TABLE>
>];
title -> chart [style=invis];
}
EOF
echo "DOT file generated: $DOT_FILE"
echo ""
echo "To generate PNG:"
echo " dot -Tpng $DOT_FILE -o timing_chart.png"
echo ""
echo "To generate SVG:"
echo " dot -Tsvg $DOT_FILE -o timing_chart.svg"
echo ""
# Now exit with appropriate status
if [ $FAILED -eq 0 ]; then
if [ $RATE_LIMITED -eq 0 ]; then
echo -e "${GREEN}All tests passed!${NC}"
else
echo -e "${YELLOW}All non-rate-limited tests passed!${NC}"
fi
exit 0
else
echo -e "${RED}Some tests failed (but timing chart was generated)${NC}"
exit 1
fi

259
test/timing_chart.dot Normal file
View file

@ -0,0 +1,259 @@
digraph TimingChart {
rankdir=LR;
node [shape=plaintext];
graph [fontname="monospace", fontsize=10];
node [fontname="monospace", fontsize=9];
title [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0">
<TR><TD COLSPAN="2"><B>Unsandbox Language Execution Times</B></TD></TR>
<TR><TD COLSPAN="2">Fibonacci(10) benchmark across 39 languages</TD></TR>
</TABLE>>];
chart [label=<
<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ALIGN="LEFT"><B>Language</B></TD>
<TD ALIGN="LEFT"><B>Time (ms)</B></TD>
<TD ALIGN="LEFT" WIDTH="400"><B>Bar Chart</B></TD>
<TD ALIGN="LEFT"><B>Status</B></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>c</B></TD>
<TD ALIGN="RIGHT">4727</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="147" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>clj</B></TD>
<TD ALIGN="RIGHT">5400</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="168" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>cob</B></TD>
<TD ALIGN="RIGHT">5419</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="169" HEIGHT="12" BGCOLOR="#F44336"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#F44336">✗ FAIL</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>cpp</B></TD>
<TD ALIGN="RIGHT">5167</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="161" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>cr</B></TD>
<TD ALIGN="RIGHT">6945</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="216" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>cs</B></TD>
<TD ALIGN="RIGHT">5063</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="158" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>d</B></TD>
<TD ALIGN="RIGHT">6228</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="194" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>dart</B></TD>
<TD ALIGN="RIGHT">4751</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="148" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>erl</B></TD>
<TD ALIGN="RIGHT">4416</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="137" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>ex</B></TD>
<TD ALIGN="RIGHT">5366</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="167" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>f90</B></TD>
<TD ALIGN="RIGHT">4890</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="152" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>forth</B></TD>
<TD ALIGN="RIGHT">4265</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="133" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>fs</B></TD>
<TD ALIGN="RIGHT">7016</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="219" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>go</B></TD>
<TD ALIGN="RIGHT">11784</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="368" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>groovy</B></TD>
<TD ALIGN="RIGHT">5662</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="176" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>hs</B></TD>
<TD ALIGN="RIGHT">7762</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="242" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>java</B></TD>
<TD ALIGN="RIGHT">5583</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="174" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>jl</B></TD>
<TD ALIGN="RIGHT">5135</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="160" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>js</B></TD>
<TD ALIGN="RIGHT">4402</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="137" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>kt</B></TD>
<TD ALIGN="RIGHT">11305</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="353" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>lisp</B></TD>
<TD ALIGN="RIGHT">4364</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="136" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>lua</B></TD>
<TD ALIGN="RIGHT">4102</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="128" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>m</B></TD>
<TD ALIGN="RIGHT">4536</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="141" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>ml</B></TD>
<TD ALIGN="RIGHT">4537</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="141" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>nim</B></TD>
<TD ALIGN="RIGHT">5447</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="170" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>php</B></TD>
<TD ALIGN="RIGHT">4021</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="125" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>pl</B></TD>
<TD ALIGN="RIGHT">1692</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="52" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>pro</B></TD>
<TD ALIGN="RIGHT">4493</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="140" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>py</B></TD>
<TD ALIGN="RIGHT">4260</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="133" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>r</B></TD>
<TD ALIGN="RIGHT">4554</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="142" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>raku</B></TD>
<TD ALIGN="RIGHT">4623</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="144" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>rb</B></TD>
<TD ALIGN="RIGHT">4236</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="132" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>rs</B></TD>
<TD ALIGN="RIGHT">6598</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="206" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>scm</B></TD>
<TD ALIGN="RIGHT">3951</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="123" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>sh</B></TD>
<TD ALIGN="RIGHT">4805</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="150" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>tcl</B></TD>
<TD ALIGN="RIGHT">4249</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="132" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>ts</B></TD>
<TD ALIGN="RIGHT">4874</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="152" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>v</B></TD>
<TD ALIGN="RIGHT">4643</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="145" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><B>zig</B></TD>
<TD ALIGN="RIGHT">12806</TD>
<TD ALIGN="LEFT"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="400" HEIGHT="12" BGCOLOR="#4CAF50"></TD></TR></TABLE></TD>
<TD ALIGN="LEFT"><FONT COLOR="#4CAF50">✓ PASS</FONT></TD>
</TR>
</TABLE>
>];
title -> chart [style=invis];
}