File: NSLSFWindowTest.cpp

package info (click to toggle)
labplot 2.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 78,500 kB
  • sloc: cpp: 241,048; ansic: 6,324; python: 915; xml: 400; yacc: 237; sh: 221; awk: 35; makefile: 11
file content (112 lines) | stat: -rw-r--r-- 3,800 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
	File                 : NSLSFWindowTest.cpp
	Project              : LabPlot
	Description          : NSL Tests for special window functions
	--------------------------------------------------------------------
	SPDX-FileCopyrightText: 2019 Stefan Gerlach <stefan.gerlach@uni.kn>

	SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "NSLSFWindowTest.h"

extern "C" {
#include "backend/nsl/nsl_sf_window.h"
}

// ##############################################################################
// #################  window types
// ##############################################################################

void NSLSFWindowTest::testWindowTypes() {
	const int N = 10;
	double data[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
	double result[][N] = {
		{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
		{0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.7, 0.5, 0.3, 0.1},
		{0, 2 / 9., 4 / 9., 6 / 9., 8 / 9., 8 / 9., 6 / 9., 4 / 9., 2 / 9., 0},
		{2 / 11., 4 / 11., 6 / 11., 8 / 11., 10 / 11., 10 / 11., 8 / 11., 6 / 11., 4 / 11., 2 / 11.},
		{0.330578512396694,
		 0.59504132231405,
		 0.793388429752066,
		 0.925619834710744,
		 0.991735537190083,
		 0.991735537190083,
		 0.925619834710744,
		 0.793388429752066,
		 0.59504132231405,
		 0.330578512396694},
		{0, 0.116977778440511, 0.413175911166535, 0.75, 0.969846310392954, 0.969846310392954, 0.75, 0.413175911166535, 0.116977778440511, 0},
		{0.08, 0.18761955616527, 0.460121838273212, 0.77, 0.972258605561518, 0.972258605561518, 0.77, 0.460121838273212, 0.18761955616527, 0.08},
		{0, 0.0508696326538654, 0.258000501503662, 0.63, 0.951129865842472, 0.951129865842472, 0.63, 0.258000501503662, 0.0508696326538655, 0},
		{0, 0.0137486265628393, 0.141900826716656, 0.514746, 0.930560546720505, 0.930560546720505, 0.514746, 0.141900826716656, 0.0137486265628393, 0},
		{0.0003628,
		 0.01789099867138,
		 0.15559612641629,
		 0.5292298,
		 0.933220224912329,
		 0.93322022491233,
		 0.5292298,
		 0.155596126416291,
		 0.0178909986713801,
		 0.0003628},
		{6.e-05, 0.0150711734102182, 0.147039557862381, 0.520575, 0.9316592687274, 0.931659268727401, 0.520575, 0.147039557862382, 0.0150711734102182, 6.e-05},
		{0, -0.0867710194112928, -0.331895219303666, 0.918, 4.00066623871496, 4.00066623871496, 0.918, -0.331895219303665, -0.0867710194112926, 0},
		{0,
		 0.342020143325669,
		 0.642787609686539,
		 0.866025403784439,
		 0.984807753012208,
		 0.984807753012208,
		 0.866025403784439,
		 0.642787609686539,
		 0.342020143325669,
		 0},
		{0, 0.142236444948122, 0.420680359153233, 0.73, 0.950416529231978, 0.950416529231979, 0.73, 0.420680359153233, 0.142236444948122, 0},
		{0,
		 0.263064408273866,
		 0.564253278793615,
		 0.826993343132688,
		 0.979815536051017,
		 0.979815536051017,
		 0.826993343132688,
		 0.564253278793615,
		 0.263064408273866,
		 0}};

	for (int t = (int)nsl_sf_window_uniform; t <= (int)nsl_sf_window_lanczos; t++) {
		nsl_sf_apply_window(data, N, (nsl_sf_window_type)t);
		for (int i = 0; i < N; i++)
			QCOMPARE(data[i] + 1., result[t][i] + 1.);
	}
}

// ##############################################################################
// #################  performance
// ##############################################################################

void NSLSFWindowTest::testPerformance_triangle() {
	const int N = 1e6;
	double* data = new double[N];

	QBENCHMARK { nsl_sf_apply_window(data, N, nsl_sf_window_triangle); }
	delete[] data;
}

void NSLSFWindowTest::testPerformance_welch() {
	const int N = 1e6;
	double* data = new double[N];

	QBENCHMARK { nsl_sf_apply_window(data, N, nsl_sf_window_welch); }
	delete[] data;
}

void NSLSFWindowTest::testPerformance_flat_top() {
	const int N = 1e6;
	double* data = new double[N];

	QBENCHMARK { nsl_sf_apply_window(data, N, nsl_sf_window_flat_top); }
	delete[] data;
}

QTEST_MAIN(NSLSFWindowTest)