#!/usr/bin/env gbs3 Private $fCompileTime as Float Private Sub RunScript(sScript As String, sRun As String, bGambasOnly As Boolean) As Float Dim aResult as String[] Dim sResult As String Dim fTime As Float If Not Exist(Application.Dir &/ sScript) Then Return -1 If bGambasOnly Then Print "Running benchmark: '"; sRun; " "; sScript; "'" Else Print "" Endif Shell "/usr/bin/time -v " & sRun & " " & sScript & " 2>&1 >/dev/null" To sResult If Not sResult Then Error.Raise("Script '" & sRun & " " & sScript & "' failed!") aResult = Split(sResult, "\n") For Each sResult In aResult sResult = Trim(sResult) If sResult Begins "User time" Or If sResult Begins "System time" Then fTime += CFloat(Mid$(sResult, InStr(sResult, ":") + 2)) Endif Next $fCompileTime = 0 Try $fCompileTime = CFloat(Trim(aResult[0])) Return fTime End Private Sub FormatResult(cResult As Collection, iCount As Integer, sLang As String) As String Dim bBetter As Boolean = True Dim sFormat As String Dim sTest As String If cResult[sLang] <= 0 Then Return "-" For Each sTest In ["python", "perl", "java","gambas"] If cResult[sTest] < cResult[sLang] Then bBetter = False Break Endif Next sFormat = Format(cResult[sLang] / iCount, "0.00") If bBetter Then sFormat = "" & sFormat & "" Return sFormat End Dim sBenchmark As String Dim cResult As Collection Dim cAllResult As New Collection Dim sLang As String Dim sResult As String Dim iPos As Integer Dim bGambasOnly As Boolean Dim sBenchmarkOnly As String Dim iCount As Integer = 1 Dim I As Integer Dim fTime As Float For I = 1 To Args.Max If Args[I] = "-gambas" Then bGambasOnly = True Else If Args[I] = "-count" Then If I < Args.Max And If Args[I + 1] Not Begins "-" Then Try iCount = Max(1, CInt(Args[I + 1])) inc I Endif Else sBenchmarkOnly = Args[I] Endif Next For I = 1 To iCount If iCount > 1 Then Print "-------- Run #"; I;" --------" For Each sBenchmark In Dir(Application.Dir, "*.gbs").Sort() sBenchmark = File.BaseName(sBenchmark) If sBenchmark = "benchmark" Then Continue If sBenchmarkOnly And If sBenchmark <> sBenchmarkOnly Then Continue cResult = cAllResult[sBenchmark] If Not cResult Then cResult = New Collection cResult.Default = 0.0 cResult!name = sBenchmark cAllResult[sBenchmark] = cResult Endif If Not bGambasOnly Then cResult!python += RunScript(sBenchmark & ".py", "python", bGambasOnly) cResult!perl += RunScript(sBenchmark & ".pl", "perl", bGambasOnly) If sBenchmark Not Begins "string" Then cResult!java += RunScript(sBenchmark & ".jvs", "java -Xint --source 11", bGambasOnly) Endif cResult!javajit += RunScript(sBenchmark & ".jvs", "java --source 11", bGambasOnly) Endif fTime = RunScript(sBenchmark & ".gbs", "gbs3 -f -U -c", bGambasOnly) cResult!gambasjit += fTime cResult!gambasjitwct += fTime - $fCompileTime cResult!gambas += RunScript(sBenchmark & ".gbs", "gbs3 -c", bGambasOnly) Next Next Print ' Print "
Benchmark | " For Each sLang In ["Python", "Perl", "Java", "Gambas", "Java JIT", "Gambas JIT", "Gambas JIT without compilation time"] Print ""; Html(sLang); " | " Next Print "||||||
---|---|---|---|---|---|---|---|
"; cResult!name; " | " Print ""; FormatResult(cResult, iCount, "python"); " | " Print ""; FormatResult(cResult, iCount, "perl"); " | " Print ""; FormatResult(cResult, iCount, "java"); " | " Print ""; FormatResult(cResult, iCount, "gambas"); " | " Print ""; Format(cResult!javajit / iCount, "0.00"); " | " Print ""; Format(cResult!gambasjit / iCount, "0.00"); " | " Print ""; Format(cResult!gambasjitwct / iCount, "0.00"); " | " Print "