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:
commit
2b35819393
143 changed files with 30022 additions and 0 deletions
13
test/fib.c
Normal file
13
test/fib.c
Normal 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
7
test/fib.clj
Normal 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
32
test/fib.cob
Normal 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
13
test/fib.cpp
Normal 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
8
test/fib.cr
Normal 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
14
test/fib.cs
Normal 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
12
test/fib.d
Normal 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
10
test/fib.dart
Normal 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
10
test/fib.erl
Normal 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
12
test/fib.ex
Normal 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
20
test/fib.f90
Normal 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
16
test/fib.forth
Normal 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
6
test/fib.fs
Normal 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
16
test/fib.go
Normal 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
9
test/fib.groovy
Normal 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
7
test/fib.hs
Normal 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
12
test/fib.java
Normal 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
11
test/fib.jl
Normal 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
9
test/fib.js
Normal 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
10
test/fib.kt
Normal 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
7
test/fib.lisp
Normal 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
10
test/fib.lua
Normal 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
16
test/fib.m
Normal 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
8
test/fib.ml
Normal 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
7
test/fib.nim
Normal 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
11
test/fib.php
Normal 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
10
test/fib.pl
Normal 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
21
test/fib.pro
Normal 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
8
test/fib.py
Normal 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
9
test/fib.r
Normal 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
10
test/fib.raku
Normal 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
9
test/fib.rb
Normal 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
12
test/fib.rs
Normal 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
8
test/fib.scm
Normal 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
15
test/fib.sh
Normal 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
12
test/fib.tcl
Normal 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
8
test/fib.ts
Normal 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
12
test/fib.v
Normal 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
14
test/fib.zig
Normal 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
247
test/run_tests.sh
Executable 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
259
test/timing_chart.dot
Normal 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];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue