github.com/DARA-Project/GoDist-Scheduler@v0.0.0-20201030134746-668de4acea0d/u-benchmarks/propchecker/property_bmark.go (about)

     1  package main
     2  
     3  import (
     4      "github.com/DARA-Project/GoDist-Scheduler/propchecker"
     5      "os"
     6      "log"
     7      "math/rand"
     8      "math"
     9      "fmt"
    10      "time"
    11  )
    12  
    13  func main() {
    14      files := [4]string{"./sample1.prop", "./sample2.prop", "./sample5.prop", "./sample10.prop"}
    15      num_props := [4]string{"1", "2", "5", "10"}
    16      var build_times []float64
    17      var load_check_times []float64
    18      var check_times []float64
    19      var check_time_sds []float64
    20      for _, filename := range files {
    21          start := time.Now()
    22          checker, err := propchecker.NewChecker(filename)
    23          elapsed := time.Since(start)
    24          build_times = append(build_times, elapsed.Seconds())
    25          log.Printf("Parsing and Building took %s", elapsed)
    26          if err != nil {
    27              log.Fatal(err)
    28          }
    29  
    30          context := make(map[string]interface{})
    31          // The choice of numbers really doesn't matter in a benchmarking context
    32          // since every property is going to be executed anyways.
    33          context["main.a"] = 15
    34          context["main.b"] = 20
    35          context["main.c"] = 0
    36          context["main.d"] = 10
    37  
    38          start = time.Now()
    39          result, failures, err := checker.Check(context)
    40          elapsed = time.Since(start)
    41          log.Printf("Checking Properties took %s\n", elapsed)
    42          load_check_times = append(load_check_times, elapsed.Seconds())
    43          log.Println("Num failures", failures)
    44          if err != nil {
    45              log.Fatal(err)
    46          }
    47          log.Println(result)
    48  
    49          var total_time []float64
    50          var sum_time float64
    51          N := 100000
    52          for i := 0; i < N; i++ {
    53              context["main.b"] = i
    54              context["main.a"] = rand.Intn(i + 1)
    55              context["main.c"] = rand.Intn(2 * i + 1)
    56              context["main.d"] = rand.Intn(i + 5)
    57              start = time.Now()
    58              _, _, err := checker.Check(context)
    59              elapsed = time.Since(start)
    60              //log.Printf("Checking properties took %s\n", elapsed)
    61              if err != nil {
    62                  log.Fatal(err)
    63              }
    64              total_time = append(total_time, elapsed.Seconds())
    65              sum_time += elapsed.Seconds()
    66          }
    67          average := sum_time / float64(N)
    68          check_times = append(check_times, average)
    69          var sd float64
    70          for _, val := range total_time {
    71              sd += math.Pow(val - average, 2)
    72          }
    73          sd = math.Sqrt(sd/float64(N))
    74          check_time_sds = append(check_time_sds, sd)
    75      }
    76  
    77      f, err := os.Create("results.csv")
    78      if err != nil {
    79          log.Fatal(err)
    80      }
    81      defer f.Close()
    82      _, err = f.WriteString("Filename,NumProps,BuildTime,LoadTime,CheckTime,SD\n")
    83      if err != nil {
    84          log.Fatal(err)
    85      }
    86      for i := 0; i < 4; i++ {
    87          _, err = f.WriteString(files[i] + "," + num_props[i] + fmt.Sprintf(",%f,%f,%f,%f\n", build_times[i], load_check_times[i], check_times[i], check_time_sds[i]))
    88          if err != nil {
    89              log.Fatal(err)
    90          }
    91      }
    92  }