79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
// Copyright 2022 wanderer <a_mirre at utb dot cz>
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package report
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"text/template"
|
|
"time"
|
|
|
|
"git.dotya.ml/wanderer/math-optim/util"
|
|
)
|
|
|
|
type Table struct {
|
|
Algo string
|
|
Header []string
|
|
ColLayout []string
|
|
Rows []Row
|
|
}
|
|
|
|
type Row struct {
|
|
// Title of the row should contain the settings used to get the Values.
|
|
Title string
|
|
Values []float64
|
|
}
|
|
|
|
func NewTable() *Table {
|
|
return &Table{}
|
|
}
|
|
|
|
func NewRow() *Row {
|
|
return &Row{}
|
|
}
|
|
|
|
func SaveTableToFile(t Table) {
|
|
safeName := util.SanitiseFName(t.Algo)
|
|
texTableFile := GetTexDir() + "table-" + safeName + ".tex"
|
|
tmplTableFile := "report/table.tmpl"
|
|
|
|
if _, err := os.Stat(tmplTableFile); err != nil {
|
|
// TODO(me): fix this.
|
|
// this block is relevant for the unit test path, somehow the file is
|
|
// not found as defined above.
|
|
log.Println(err, `, weird test behaviour , prepending "../"`)
|
|
|
|
tmplTableFile = "../" + tmplTableFile
|
|
}
|
|
|
|
tmplTable := template.Must(template.ParseFiles(tmplTableFile))
|
|
|
|
ttf := tableTexFiles{Algo: t.Algo, FilePaths: []string{texTableFile}}
|
|
allTables.TexFiles = append(allTables.TexFiles, ttf)
|
|
|
|
f, err := os.Create(texTableFile)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
err = tmplTable.Execute(f, struct {
|
|
Algo string
|
|
ColLayout []string
|
|
ColNames []string
|
|
Rs []Row
|
|
Timestamp time.Time
|
|
}{
|
|
Algo: t.Algo,
|
|
ColNames: t.Header,
|
|
ColLayout: t.ColLayout,
|
|
Rs: t.Rows,
|
|
Timestamp: time.Now(),
|
|
})
|
|
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
}
|