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  }