9.9){ return number_format($d); }
elseif ($d>0.0){ return number_format($d,1); }
else { return " "; }
}
// PAGE ////////////////////////////////////////////////
MkMenuForm($Tests,$SelectedTest,$Langs,NULL);
$Row = $Tests[$SelectedTest];
$TestName = $Row[TEST_NAME];
$TestTag = $Row[TEST_TAG];
$TestLink = $Row[TEST_LINK];
list($Succeeded,$Failed,$Special,$Labels,$Ratios) = $Data;
unset($Data);
$first = 0;
$NString = 'N=?';
foreach($Succeeded as $d){
if ($d[DATA_TESTVALUE]>0){
$testValue = (double)$d[DATA_TESTVALUE];
$NString = 'N='.number_format($testValue);
break;
}
}
// BEWARE - Hard coded values - BEWARE
if ($TestName=='fasta'||$TestName=='k-nucleotide'||
$TestName=='reverse-complement'||$TestName=='regex-dna'){
if ($d[DATA_TESTVALUE] == 25000000) { $NString = '≈240MB '.$NString; }
elseif ($d[DATA_TESTVALUE] == 2500000) { $NString = '≈24MB '.$NString; }
elseif ($d[DATA_TESTVALUE] == 5000000) { $NString = '≈50MB '.$NString; }
elseif ($d[DATA_TESTVALUE] == 1000000) { $NString = '≈10MB '.$NString; }
elseif ($d[DATA_TESTVALUE] == 500000) { $NString = '≈5MB '.$NString; }
}
if ($TestName=='startup'){ $NString = ''; }
// Use the table column headers to emphasize the row sort order
$CPU_sort_td = '
sort | ';
$MEM_sort_td = '
sort | ';
$ELAPSED_sort_td = '
sort | ';
$GZBYTES_sort_td = '
sort | ';
if ($Sort=='fullcpu'){
$CPU_sort_td = '
| ';
$Chart_intro_1 = '
how many times slower';
$Chart_intro_2 = 'program was, compared to the fastest program';
} elseif ($Sort=='kb'){
$MEM_sort_td = '
| ';
$Chart_intro_1 = '
how many times more Memory';
$Chart_intro_2 = 'program used, compared to the program that used least Memory';
} elseif ($Sort=='elapsed'){
$ELAPSED_sort_td = '
| ';
$Chart_intro_1 = '
how many times slower';
$Chart_intro_2 = 'program was, compared to the fastest program';
} elseif ($Sort=='gz'){
$GZBYTES_sort_td = '
| ';
$Chart_intro_1 = '
how many times more Code';
$Chart_intro_2 = 'program used, compared to the program that used least Code';
}
if ($CanonicalPage){ echo '
'; }
?>
Each chart bar shows , one ↓ .

These are not the only programs that could be written. These are not the only compilers and interpreters. These are not the only programming languages.
Column × shows how many times more each program used compared to the benchmark program that used least.
diff program output N = 10 with this 1KB output file to check your program is correct before contributing.
We are trying to show the performance of various programming language implementations - so we ask that contributed programs not only give the correct result, but also use the same algorithm to calculate that result.
Each program should
- define a tree node class and methods, a tree node record and procedures, or an algebraic data type and functions, or…
- allocate a binary tree to 'stretch' memory, check it exists, and deallocate it
- allocate a long-lived binary tree which will live-on while other trees are allocated and deallocated
- allocate, walk, and deallocate many bottom-up binary trees
- allocate a tree
- walk the tree nodes, checksum the node items (and maybe deallocate the node)
- deallocate the tree
- check that the long-lived binary tree still exists
Note: this is an adaptation of a benchmark for testing GC so we are interested in the whole tree being allocated before any nodes are GC'd - which probably excludes lazy evaluation.
Note: the left subtrees are heads of the right subtrees, keeping a depth counter in the accessors to avoid duplication is cheating!
Note: the tree should have tree-nodes all the way down, replacing the bottom nodes by some other value is not acceptable; and the bottom nodes should be at depth 0.
Note: these programs are being measured with the default initial heap size - the measurements may be very different with a larger initial heap size or GC tuning.
Please don't implement your own custom memory pool or free list.
The binary-trees benchmark is a simplistic adaptation of Hans Boehm's GCBench,
which in turn was adapted from a benchmark by John Ellis and Pete Kovac.
Thanks to Christophe Troestler and Einar Karttunen for help with this benchmark.