ssa

Форк
0
/
pic8_test.go 
113 строк · 3.1 Кб
1
package ssaApp_test
2

3
import (
4
	"fmt"
5
	"math"
6
	"os"
7
	"strconv"
8
	"strings"
9
	"testing"
10

11
	"github.com/RB-PRO/ssa/internal/ssaApp"
12
	"github.com/xuri/excelize/v2"
13
	"gonum.org/v1/gonum/mat"
14
)
15

16
// Тестирование функции расчёта мгновенной частота нормированной АКФ сингулярных троек sET12 для сегментов pw
17
func TestInstantaneous_frequency_of_normalized_ACF_sET12(t *testing.T) {
18
	//varArr, _ := xlsx2floatArr("pic8_test.xlsx", "Лист1")
19
	//SaveVarStr("pic8_test.txt", varArr)
20

21
	// Поулчить значение переменной из файла
22
	pic8_test_txt, pic8_test_txt_Error := OpenVarStr("pic8_test.txt")
23
	if pic8_test_txt_Error != nil {
24
		t.Error(pic8_test_txt_Error)
25
	}
26
	// Сделать из строки массив float64
27
	float64Dense, float64Dense_Error := Str2FloatArr(pic8_test_txt)
28
	if float64Dense_Error != nil {
29
		t.Error(float64Dense_Error)
30
	}
31

32
	AcfNrm_sET12 := mat.NewDense(102, 200, float64Dense)
33

34
	S := 200
35
	win := 1024
36
	lag := int(math.Floor(float64(win) / 10.0)) // % наибольший лаг АКФ <= win/10
37
	cad := 30                                   // 30 кадров/сек
38
	dt := 1 / float64(cad)                      // интервал дискретизации времени, сек
39
	lgl := make([]float64, lag)
40
	for m := 0; m < len(lgl); m++ {
41
		lgl[m] = float64(m + 1)
42
	}
43

44
	insFrc_AcfNrm, insFrc_AcfNrm_Error := ssaApp.Instantaneous_frequency_of_normalized_ACF_sET12(*AcfNrm_sET12, S, lag, dt, lgl)
45
	if insFrc_AcfNrm_Error != nil {
46
		t.Error(insFrc_AcfNrm_Error)
47
	}
48

49
	SaveVarStr("insFrc_AcfNrm.txt", fmt.Sprintf("%v", insFrc_AcfNrm))
50

51
}
52

53
// читает файл и выдаёт строку для использования в тестах
54
func xlsx2floatArr(filename string, sSheet string) (output string, errorFile error) {
55
	xlsxFile, errorFile := excelize.OpenFile(filename, excelize.Options{})
56
	if errorFile != nil {
57
		return "", errorFile
58
	}
59
	defer xlsxFile.Close()
60

61
	// Получить все строки в sSheet
62
	rows, errorFile := xlsxFile.GetRows(sSheet)
63
	if errorFile != nil {
64
		return "", errorFile
65
	}
66
	for _, row := range rows {
67
		for _, colCell := range row {
68
			output += colCell + ","
69
		}
70
	}
71
	return output[:len(output)-1], nil
72
}
73

74
// Сохранить переменную в файл
75
func SaveVarStr(filename, data string) error {
76
	f, err := os.Create(filename)
77
	if err != nil {
78
		return err
79
	}
80
	defer f.Close()
81

82
	_, err = f.WriteString(data)
83
	if err != nil {
84
		return err
85
	}
86
	return nil
87
}
88

89
// Сохранить значение файла в переменную
90
func OpenVarStr(filename string) (string, error) {
91
	b, err := os.ReadFile(filename) // just pass the file name
92
	if err != nil {
93
		return "", err
94
	}
95
	return string(b), nil
96
}
97

98
// Преобразовать строку в массив float
99
func Str2FloatArr(data string) ([]float64, error) {
100
	strs := strings.Split(data, ",")
101
	outputArray := make([]float64, len(strs))
102
	for indexStrs, valueStr := range strs {
103

104
		if n, err := strconv.ParseFloat(valueStr, 64); err == nil {
105
			outputArray[indexStrs] = n
106
		} else {
107
			fmt.Println(">>>", valueStr)
108

109
			//	return nil, err
110
		}
111
	}
112
	return outputArray, nil
113
}
114

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.