github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/benchmarks_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/lmorg/murex/lang"
     8  )
     9  
    10  func BenchmarkAForeachN(b *testing.B) {
    11  	lang.InitEnv()
    12  
    13  	block := fmt.Sprintf(`a [1..%d] -> foreach i { out "iteration $i of %d" }`, b.N, b.N)
    14  
    15  	_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute([]rune(block))
    16  	if err != nil {
    17  		b.Error(err.Error())
    18  	}
    19  }
    20  
    21  func BenchmarkJaForeachN(b *testing.B) {
    22  	lang.InitEnv()
    23  
    24  	block := fmt.Sprintf(`ja [1..%d] -> foreach i { out "iteration $i of %d" }`, b.N, b.N)
    25  
    26  	_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute([]rune(block))
    27  	if err != nil {
    28  		b.Error(err.Error())
    29  	}
    30  }
    31  
    32  func BenchmarkAForeachForkN(b *testing.B) {
    33  	lang.InitEnv()
    34  
    35  	block := fmt.Sprintf(`a [1..%d] -> foreach i { exec printf "iteration $i of %d\n" }`, b.N, b.N)
    36  
    37  	_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute([]rune(block))
    38  	if err != nil {
    39  		b.Error(err.Error())
    40  	}
    41  }
    42  
    43  func BenchmarkCsvIndexNTimes(b *testing.B) {
    44  	lang.InitEnv()
    45  
    46  	block := []rune(`tout csv "murex,foo,bar\n1,2,3\na,b,c\nz,y,x\n" -> [ :foo ]`)
    47  
    48  	for i := 0; i < b.N; i++ {
    49  		_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute(block)
    50  		if err != nil {
    51  			b.Error(err.Error())
    52  		}
    53  	}
    54  }
    55  
    56  func BenchmarkCsvForkNTimes(b *testing.B) {
    57  	lang.InitEnv()
    58  
    59  	block := []rune(`tout csv "murex,foo,bar\n1,2,3\na,b,c\nz,y,x\n" -> grep foo`)
    60  
    61  	for i := 0; i < b.N; i++ {
    62  		_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute(block)
    63  		if err != nil {
    64  			b.Error(err.Error())
    65  		}
    66  	}
    67  }
    68  
    69  func BenchmarkForkPipelineNTimes(b *testing.B) {
    70  	lang.InitEnv()
    71  
    72  	block := []rune(`exec printf "the\nquick\nbrown\nfox\n" -> tr '[:lower:]' '[:upper:]' -> tr '[:upper:]' '[:lower:]'`)
    73  
    74  	for i := 0; i < b.N; i++ {
    75  		_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute(block)
    76  		if err != nil {
    77  			b.Error(err.Error())
    78  		}
    79  	}
    80  }
    81  
    82  func BenchmarkMathLibsEqu(b *testing.B) {
    83  	lang.InitEnv()
    84  
    85  	block := fmt.Sprintf(`a [1..%d] -> foreach i { = 1 * %d }`, b.N, b.N)
    86  
    87  	_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute([]rune(block))
    88  	if err != nil {
    89  		b.Error(err.Error())
    90  	}
    91  }
    92  
    93  func BenchmarkMathLibsExpr(b *testing.B) {
    94  	lang.InitEnv()
    95  
    96  	block := fmt.Sprintf(`a [1..%d] -> foreach i { 1 * %d }`, b.N, b.N)
    97  
    98  	_, err := lang.ShellProcess.Fork(lang.F_NO_STDIN | lang.F_NO_STDOUT | lang.F_NO_STDERR).Execute([]rune(block))
    99  	if err != nil {
   100  		b.Error(err.Error())
   101  	}
   102  }