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 }