github.com/DARA-Project/GoDist-Scheduler@v0.0.0-20201030134746-668de4acea0d/tools/cov_report.go (about) 1 package main 2 3 import ( 4 "bufio" 5 "dara" 6 "fmt" 7 "github.com/DARA-Project/GoDist-Scheduler/common" 8 "log" 9 "os" 10 "strings" 11 ) 12 13 func read_blocks_file(filename string) (*map[string]bool, error) { 14 file, err := os.Open(filename) 15 if err != nil { 16 return nil, err 17 } 18 defer file.Close() 19 20 allBlocks := make(map[string]bool) 21 scanner := bufio.NewScanner(file) 22 for scanner.Scan() { 23 block := strings.TrimSpace(scanner.Text()) 24 if block != "" { 25 allBlocks[block] = true 26 } 27 } 28 if err = scanner.Err(); err != nil { 29 return nil, err 30 } 31 return &allBlocks, nil 32 } 33 34 func print_coverage(schedule *dara.Schedule, blocks *map[string]bool) { 35 covered_blocks := make(map[string]uint64) 36 for _, covEvent := range schedule.CovEvents { 37 for block, count := range covEvent.CoverageInfo { 38 if v, ok := covered_blocks[block]; ok { 39 covered_blocks[block] = v + count 40 } else { 41 covered_blocks[block] = count 42 } 43 } 44 } 45 fmt.Println("Total # of blocks in source code:", len(*blocks)) 46 fmt.Println("Total # of blocks covered:", len(covered_blocks)) 47 fmt.Println("Total # of blocks uncovered:", len(*blocks) - len(covered_blocks)) 48 fmt.Println("Covered Block \t Frequency") 49 for block, count := range covered_blocks { 50 fmt.Println(block, "\t", count) 51 } 52 fmt.Println("Uncovered Blocks:") 53 for block, _ := range *blocks { 54 if _, ok := covered_blocks[block]; !ok { 55 fmt.Println(block) 56 } 57 } 58 } 59 60 func main() { 61 if len(os.Args) < 3 { 62 log.Fatal("Usage: go run cov_report.go <schedule_filename> <blocks_filename>") 63 } 64 schedule_filename := os.Args[1] 65 blocks_filename := os.Args[2] 66 67 schedule, err := common.ReadSchedule(schedule_filename) 68 if err != nil { 69 log.Fatal(err) 70 } 71 blocks, err := read_blocks_file(blocks_filename) 72 if err != nil { 73 log.Fatal(err) 74 } 75 print_coverage(schedule, blocks) 76 }