46 lines
989 B
Go
46 lines
989 B
Go
package csvwriter
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type BenchmarkResult struct {
|
|
Structure string
|
|
Mode string
|
|
Operation string
|
|
Time float64
|
|
}
|
|
|
|
func (b *BenchmarkResult) ToString() string {
|
|
return fmt.Sprintf("%s %s %s %f", b.Structure, b.Mode, b.Operation, b.Time)
|
|
}
|
|
func (b *BenchmarkResult) ToStrings() []string {
|
|
return []string{b.Structure, b.Mode, b.Operation, fmt.Sprintf("%d", b.Time)}
|
|
}
|
|
|
|
// AppendRaw дописывает произвольные строки в CSV
|
|
func AppendRaw(results []BenchmarkResult) error {
|
|
|
|
filename := filepath.Join("results", "benchmarks.csv")
|
|
|
|
file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
writer := csv.NewWriter(file)
|
|
defer writer.Flush()
|
|
|
|
rows := make([][]string, len(results))
|
|
|
|
for i, res := range results {
|
|
rows[i] = res.ToStrings()
|
|
}
|
|
|
|
return writer.WriteAll(rows) // WriteAll пишет всё сразу
|
|
}
|