forked from UNN/2026-rff_mp
Обновление csvwriter
- Функция создания пустого файла - Разобрался с директорией для сохранения файла
This commit is contained in:
parent
6e259a4770
commit
62795e88ba
|
|
@ -18,7 +18,26 @@ 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)}
|
||||
return []string{b.Structure, b.Mode, b.Operation, fmt.Sprintf("%f", b.Time)}
|
||||
}
|
||||
|
||||
// Создаём пустой csv файл с заголовками
|
||||
func CreateEmptyCSV(dir, name string) error {
|
||||
filename := filepath.Join(dir, name)
|
||||
|
||||
file, err := os.Create(filename)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
writer := csv.NewWriter(file)
|
||||
defer writer.Flush()
|
||||
header := []string{"Structure", "Mode", "Operation", "Time"}
|
||||
writer.Write(header)
|
||||
|
||||
return writer.Error()
|
||||
}
|
||||
|
||||
// AppendRaw дописывает произвольные строки в CSV
|
||||
|
|
@ -26,6 +45,14 @@ func AppendRaw(results []BenchmarkResult) error {
|
|||
|
||||
filename := filepath.Join("results", "benchmarks.csv")
|
||||
|
||||
fileExists := true
|
||||
isEmpty := true
|
||||
if info, err := os.Stat(filename); err == nil {
|
||||
isEmpty = info.Size() == 0
|
||||
} else if os.IsNotExist(err) {
|
||||
fileExists = false
|
||||
}
|
||||
|
||||
file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -35,10 +62,19 @@ func AppendRaw(results []BenchmarkResult) error {
|
|||
writer := csv.NewWriter(file)
|
||||
defer writer.Flush()
|
||||
|
||||
// Если файл новый или пустой, записываем заголовки
|
||||
if !fileExists || isEmpty {
|
||||
header := []string{"Structure", "Mode", "Operation", "Time"}
|
||||
if err := writer.Write(header); err != nil {
|
||||
return fmt.Errorf("не удалось записать заголовки: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
rows := make([][]string, len(results))
|
||||
|
||||
for i, res := range results {
|
||||
rows[i] = res.ToStrings()
|
||||
// fmt.Println(res.ToStrings())
|
||||
}
|
||||
|
||||
return writer.WriteAll(rows) // WriteAll пишет всё сразу
|
||||
37
stepushovgs/data-structures/source/results/benchmarks.csv
Normal file
37
stepushovgs/data-structures/source/results/benchmarks.csv
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
Structure,Mode,Operation,Time
|
||||
Связный список,Случайный,Вставка,0.047607
|
||||
Связный список,Случайный,Вставка,0.050350
|
||||
Связный список,Случайный,Вставка,0.049572
|
||||
Связный список,Случайный,Вставка,0.049258
|
||||
Связный список,Случайный,Вставка,0.048659
|
||||
Связный список,Случайный,Вставка,0.049089
|
||||
Связный список,Отсортированный,Вставка,0.047619
|
||||
Связный список,Отсортированный,Вставка,0.047478
|
||||
Связный список,Отсортированный,Вставка,0.048357
|
||||
Связный список,Отсортированный,Вставка,0.048174
|
||||
Связный список,Отсортированный,Вставка,0.048270
|
||||
Связный список,Отсортированный,Вставка,0.047980
|
||||
Хеш таблица,Случайный,Вставка,0.002014
|
||||
Хеш таблица,Случайный,Вставка,0.002013
|
||||
Хеш таблица,Случайный,Вставка,0.002008
|
||||
Хеш таблица,Случайный,Вставка,0.001003
|
||||
Хеш таблица,Случайный,Вставка,0.002505
|
||||
Хеш таблица,Случайный,Вставка,0.001908
|
||||
Хеш таблица,Отсортированный,Вставка,0.001514
|
||||
Хеш таблица,Отсортированный,Вставка,0.001504
|
||||
Хеш таблица,Отсортированный,Вставка,0.002012
|
||||
Хеш таблица,Отсортированный,Вставка,0.001003
|
||||
Хеш таблица,Отсортированный,Вставка,0.002506
|
||||
Хеш таблица,Отсортированный,Вставка,0.001708
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.318901
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.320504
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.316685
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.315862
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.320947
|
||||
Бинарное дерево поиска,Случайный,Вставка,0.318580
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.313718
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.318131
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.322564
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.315526
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.314289
|
||||
Бинарное дерево поиска,Отсортированный,Вставка,0.316846
|
||||
|
|
|
@ -38,6 +38,21 @@ type DataStructure interface {
|
|||
Len() int
|
||||
}
|
||||
|
||||
// Создатели структур
|
||||
type StructureFactory func() DataStructure
|
||||
|
||||
func NewLinkedList() DataStructure {
|
||||
return ll.NewLinkedList()
|
||||
}
|
||||
|
||||
func NewHashTable() DataStructure {
|
||||
return ht.NewHashTable(256, 0.75)
|
||||
}
|
||||
|
||||
func NewBinSearchTree() DataStructure {
|
||||
return bst.NewBinSearchTree()
|
||||
}
|
||||
|
||||
func uniqueElements(data []ds.MyData) []ds.MyData {
|
||||
res := make([]ds.MyData, 0, len(data))
|
||||
isUnique := true
|
||||
|
|
@ -102,7 +117,7 @@ func testOneInsert(structure DataStructure, data []ds.MyData) float64 {
|
|||
return time.Since(start).Seconds()
|
||||
}
|
||||
|
||||
func TestInsert(structure DataStructure, data []ds.MyData, nameStruct, mode string) {
|
||||
func TestInsert(factory StructureFactory, data []ds.MyData, nameStruct, mode string) {
|
||||
BenchRes := make([]csvwriter.BenchmarkResult, 0)
|
||||
|
||||
allTestTime := time.Now()
|
||||
|
|
@ -111,8 +126,8 @@ func TestInsert(structure DataStructure, data []ds.MyData, nameStruct, mode stri
|
|||
// Тест Слчайной вставки
|
||||
|
||||
for i := 0; i < countRepeat; i++ {
|
||||
head := factory()
|
||||
|
||||
head := structure
|
||||
resTime := testOneInsert(head, data)
|
||||
|
||||
averageTime += resTime
|
||||
|
|
@ -122,6 +137,8 @@ func TestInsert(structure DataStructure, data []ds.MyData, nameStruct, mode stri
|
|||
Operation: "Вставка",
|
||||
Time: resTime,
|
||||
})
|
||||
fmt.Printf("%s | Вставка | %s | Время: %f\n", nameStruct, mode, resTime)
|
||||
// fmt.Println(BenchRes)
|
||||
}
|
||||
|
||||
averageTime = time.Since(allTestTime).Seconds() / countRepeat
|
||||
|
|
@ -136,24 +153,27 @@ func TestInsert(structure DataStructure, data []ds.MyData, nameStruct, mode stri
|
|||
csvwriter.AppendRaw(BenchRes)
|
||||
}
|
||||
|
||||
func Test(nameStruct string, structure DataStructure, data TestData) {
|
||||
func Test(nameStruct string, factory StructureFactory, data TestData) {
|
||||
|
||||
// BenchRes := make([]csvwriter.BenchmarkResult, 0)
|
||||
|
||||
// allTestTime := time.Now()
|
||||
|
||||
TestInsert(structure, data.Items, nameStruct, "Случайный")
|
||||
TestInsert(structure, data.ItemsSorted, nameStruct, "Отсортированный")
|
||||
TestInsert(factory, data.Items, nameStruct, "Случайный")
|
||||
TestInsert(factory, data.ItemsSorted, nameStruct, "Отсортированный")
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
testData := GenerateTestData()
|
||||
csvwriter.CreateEmptyCSV("results", "benchmarks.csv")
|
||||
|
||||
head_ll := &ll.LinkedList{}
|
||||
var head_ht *ht.HashTable = nil
|
||||
var head_bst *bst.BinSearchTree = nil
|
||||
// head_ll := &ll.LinkedList{}
|
||||
// head_ht := ht.NewHashTable(256, 0.75)
|
||||
// head_bst := bst.NewBinSearchTree()
|
||||
|
||||
Test("Связный список", head_ll, testData)
|
||||
Test("Хеш таблица", head_ht, testData)
|
||||
Test("Бинарное дерево поиска", head_bst, testData)
|
||||
fmt.Println("============= Начало тестов =============")
|
||||
|
||||
Test("Связный список", NewLinkedList, testData)
|
||||
Test("Хеш таблица", NewHashTable, testData)
|
||||
Test("Бинарное дерево поиска", NewBinSearchTree, testData)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
csvwriter "source/pkg/csv_writer"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Простой способ
|
||||
results := []csvwriter.BenchmarkResult{
|
||||
{Structure: "HashTable", Mode: "Chaining", Operation: "Insert", Time: 0.001234},
|
||||
{Structure: "LinkedList", Mode: "Singly", Operation: "Search", Time: 0.005678},
|
||||
{Structure: "BSTree", Mode: "Recursive", Operation: "Delete", Time: 0.003456},
|
||||
}
|
||||
|
||||
if err := csvwriter.AppendRaw(results); err != nil {
|
||||
fmt.Printf("Ошибка: %v\n", err)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user