#lang racket (require racket/match) (require racket/list) (require racket/file) (require threading) (require csv-reading) (require csv-writing) (define (parse-csv f) (let* ([exec-csv (open-input-file f)] [report (csv->list exec-csv)]) (close-input-port exec-csv) report)) (define (write-file file data) (with-output-to-file file (lambda () (display data)) #:exists 'replace)) (define (nth lst idx) (cond ((empty? lst) empty) ; more effiecent than (= (length lst) 0) ((= idx 0) (first lst)) (else (nth (rest lst) (- idx 1))))) (define bambu-results (cdr (parse-csv "./data/bambu-area.csv"))) (define vericert-full-inlining (cdr (parse-csv "./data/vericert-full-inlining.csv"))) (define vericert-fun (cdr (parse-csv "./data/vericert-fun.csv"))) (define (get-row lst n) (map (lambda (x) (string->number (nth x n))) lst)) (define (get-row-string lst n) (map (lambda (x) (nth x n)) lst)) (define (get-slice lst) (get-row lst 2)) (define (get-delay lst) (get-row lst 9)) (define (get-cycles lst) (get-row lst 10)) (define (get-relative lst1 lst2) (for/list ([i lst1] [j lst2]) (/ i j))) (define (mul-lists lst1 lst2) (for/list ([i lst1] [j lst2]) (* i j))) (define slice-ratio-vericert-fun (get-relative (get-slice vericert-fun) (get-slice bambu-results))) (define slice-ratio-vericert-full-inlining (get-relative (get-slice vericert-full-inlining) (get-slice bambu-results))) (define time-ratio-vericert-fun (get-relative (mul-lists (get-delay vericert-fun) (get-cycles vericert-fun)) (mul-lists (get-delay bambu-results) (get-cycles bambu-results)))) (define time-ratio-vericert-full-inlining (get-relative (mul-lists (get-delay vericert-full-inlining) (get-cycles vericert-full-inlining)) (mul-lists (get-delay bambu-results) (get-cycles bambu-results)))) (write-file "./data/time-ratio.csv" (table->string (cons '("benchmark" "vericert" "vericert-fun") (for/list ([b (get-row-string bambu-results 0)] [i time-ratio-vericert-full-inlining] [j time-ratio-vericert-fun]) (list b i j))))) (write-file "./data/slice-ratio.csv" (table->string (cons '("benchmark" "vericert" "vericert-fun") (for/list ([b (get-row-string bambu-results 0)] [i slice-ratio-vericert-full-inlining] [j slice-ratio-vericert-fun]) (list b i j)))))