Skip to content

Commit 3597827

Browse files
committed
utest: add axpby
1 parent ec74dcd commit 3597827

File tree

3 files changed

+322
-1
lines changed

3 files changed

+322
-1
lines changed

utest/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ else ()
1717
test_swap.c
1818
test_zscal.c
1919
test_amin.c
20+
test_axpby.c
2021
)
2122
endif ()
2223

utest/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ UTESTBIN=openblas_utest
1212
include $(TOPDIR)/Makefile.system
1313

1414
OBJS=utest_main.o test_min.o test_amax.o test_ismin.o test_rotmg.o test_axpy.o test_dotu.o test_dsdot.o test_swap.o test_rot.o test_dnrm2.o test_zscal.o \
15-
test_amin.o
15+
test_amin.o test_axpby.o
1616
#test_rot.o test_swap.o test_axpy.o test_dotu.o test_dsdot.o test_fork.o
1717

1818
ifneq ($(NO_LAPACK), 1)

utest/test_axpby.c

Lines changed: 320 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
/*****************************************************************************
2+
Copyright (c) 2011-2024, The OpenBLAS Project
3+
All rights reserved.
4+
5+
Redistribution and use in source and binary forms, with or without
6+
modification, are permitted provided that the following conditions are
7+
met:
8+
9+
1. Redistributions of source code must retain the above copyright
10+
notice, this list of conditions and the following disclaimer.
11+
12+
2. Redistributions in binary form must reproduce the above copyright
13+
notice, this list of conditions and the following disclaimer in
14+
the documentation and/or other materials provided with the
15+
distribution.
16+
3. Neither the name of the OpenBLAS project nor the names of
17+
its contributors may be used to endorse or promote products
18+
derived from this software without specific prior written
19+
permission.
20+
21+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
30+
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
32+
**********************************************************************************/
33+
34+
#include "openblas_utest.h"
35+
36+
#ifdef BUILD_SINGLE
37+
CTEST(axpby, saxpby_inc_0)
38+
{
39+
blasint i;
40+
blasint N = 9, incX = 0, incY = 0;
41+
float alpha = 1.0, beta = 2.0;
42+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
43+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
44+
45+
BLASFUNC(saxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
46+
47+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
48+
float y2[] = { 1535.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
49+
50+
for(i = 0; i < N; i++){
51+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
52+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
53+
}
54+
}
55+
56+
CTEST(axpby, saxpby_inc_1)
57+
{
58+
blasint i;
59+
blasint N = 9, incX = 1, incY = 1;
60+
float alpha = 0.25, beta = 0.75;
61+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
62+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
63+
64+
BLASFUNC(saxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
65+
66+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
67+
float y2[] = { 1.75, 3.75, 5.75, 7.75, 1.75, 3.75, 5.75, 7.75, 9.75 };
68+
69+
for(i = 0; i < N; i++){
70+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
71+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
72+
}
73+
}
74+
75+
CTEST(axpby, saxpby_inc_2)
76+
{
77+
blasint i;
78+
blasint N = 9, incX = 2, incY = 2;
79+
float alpha = 0.25, beta = 0.75;
80+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
81+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
82+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
83+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
84+
85+
BLASFUNC(saxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
86+
87+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
88+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
89+
float y2[] = { 1.75, 4.00, 5.75, 8.00, 1.75, 4.00, 5.75, 8.00,
90+
9.75, 2.00, 3.75, 6.00, 7.75, 2.00, 3.75, 6.00,
91+
7.75, 10.00 };
92+
93+
for(i = 0; i < 2 * N; i++){
94+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
95+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
96+
}
97+
}
98+
#endif
99+
100+
#ifdef BUILD_DOUBLE
101+
CTEST(axpby, daxpby_inc_0)
102+
{
103+
blasint i;
104+
blasint N = 9, incX = 0, incY = 0;
105+
double alpha = 1.0, beta = 2.0;
106+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
107+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
108+
109+
BLASFUNC(daxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
110+
111+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
112+
double y2[] = { 1535.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
113+
114+
for(i = 0; i < N; i++){
115+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
116+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
117+
}
118+
}
119+
120+
CTEST(axpby, daxpby_inc_1)
121+
{
122+
blasint i;
123+
blasint N = 9, incX = 1, incY = 1;
124+
double alpha = 0.25, beta = 0.75;
125+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
126+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
127+
128+
BLASFUNC(daxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
129+
130+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
131+
double y2[] = { 1.75, 3.75, 5.75, 7.75, 1.75, 3.75, 5.75, 7.75, 9.75 };
132+
133+
for(i = 0; i < N; i++){
134+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
135+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
136+
}
137+
}
138+
139+
CTEST(axpby, daxpby_inc_2)
140+
{
141+
blasint i;
142+
blasint N = 9, incX = 2, incY = 2;
143+
double alpha = 0.25, beta = 0.75;
144+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
145+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
146+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
147+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
148+
149+
BLASFUNC(daxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
150+
151+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
152+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
153+
double y2[] = { 1.75, 4.00, 5.75, 8.00, 1.75, 4.00, 5.75, 8.00,
154+
9.75, 2.00, 3.75, 6.00, 7.75, 2.00, 3.75, 6.00,
155+
7.75, 10.00 };
156+
157+
for(i = 0; i < 2 * N; i++){
158+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
159+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
160+
}
161+
}
162+
#endif
163+
164+
#ifdef BUILD_COMPLEX
165+
CTEST(axpby, caxpby_inc_0)
166+
{
167+
blasint i;
168+
blasint N = 9, incX = 0, incY = 0;
169+
float alpha[] = { 1.0, 2.0 }, beta[] = { 2.0, 1.0 };
170+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
171+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
172+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
173+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
174+
175+
BLASFUNC(caxpby)(&N, alpha, x1, &incX, beta, y1, &incY);
176+
177+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
178+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
179+
float y2[] = { 9355.0, -8865.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0,
180+
10.0, 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
181+
182+
for(i = 0; i < 2 * N; i++){
183+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
184+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
185+
}
186+
}
187+
188+
CTEST(axpby, caxpby_inc_1)
189+
{
190+
blasint i;
191+
blasint N = 9, incX = 1, incY = 1;
192+
float alpha[] = { 0.25, 0.25 }, beta[] = { 0.75, 0.75 };
193+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
194+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
195+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
196+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
197+
198+
BLASFUNC(caxpby)(&N, alpha, x1, &incX, beta, y1, &incY);
199+
200+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
201+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
202+
float y2[] = { -2.0, 5.5, -2.0, 13.5, -2.0, 5.5, -2.0, 13.5,
203+
8.0, 11.5, -2.0, 9.5, 6.0, 9.5, -2.0, 9.5, -2.0, 17.5 };
204+
205+
for(i = 0; i < 2 * N; i++){
206+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
207+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
208+
}
209+
}
210+
211+
CTEST(axpby, caxpby_inc_2)
212+
{
213+
blasint i;
214+
blasint N = 9, incX = 2, incY = 2;
215+
float alpha[] = { 0.25, 0.25 }, beta[] = { 0.75, 0.75 };
216+
float x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
217+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
218+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
219+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
220+
float y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
221+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
222+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
223+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
224+
225+
BLASFUNC(caxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
226+
227+
float x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
228+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
229+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
230+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
231+
float y2[] = { -2.0, 5.5, 6.0, 8.0, -2.0, 5.5, 6.0, 8.0, 8.0,
232+
11.5, 4.0, 6.0, 6.0, 9.5, 4.0, 6.0, -2.0, 17.5,
233+
2.0, 4.0, -2.0, 13.5, 2.0, 4.0, -2.0, 13.5, 10.0,
234+
2.0, -2.0, 9.5, 8.0, 2.0, -2.0, 9.5, 8.0, 10.0 };
235+
236+
for(i = 0; i < 4 * N; i++){
237+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], SINGLE_EPS);
238+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], SINGLE_EPS);
239+
}
240+
}
241+
#endif
242+
243+
#ifdef BUILD_COMPLEX16
244+
CTEST(axpby, zaxpby_inc_0)
245+
{
246+
blasint i;
247+
blasint N = 9, incX = 0, incY = 0;
248+
double alpha[] = { 1.0, 2.0 }, beta[] = { 2.0, 1.0 };
249+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
250+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
251+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
252+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
253+
254+
BLASFUNC(zaxpby)(&N, alpha, x1, &incX, beta, y1, &incY);
255+
256+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
257+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
258+
double y2[] = { 9355.0, -8865.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0,
259+
10.0, 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
260+
261+
for(i = 0; i < 2 * N; i++){
262+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
263+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
264+
}
265+
}
266+
267+
CTEST(axpby, zaxpby_inc_1)
268+
{
269+
blasint i;
270+
blasint N = 9, incX = 1, incY = 1;
271+
double alpha[] = { 0.25, 0.25 }, beta[] = { 0.75, 0.75 };
272+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
273+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
274+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
275+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
276+
277+
BLASFUNC(zaxpby)(&N, alpha, x1, &incX, beta, y1, &incY);
278+
279+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
280+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
281+
double y2[] = { -2.0, 5.5, -2.0, 13.5, -2.0, 5.5, -2.0, 13.5,
282+
8.0, 11.5, -2.0, 9.5, 6.0, 9.5, -2.0, 9.5, -2.0, 17.5 };
283+
284+
for(i = 0; i < 2 * N; i++){
285+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
286+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
287+
}
288+
}
289+
290+
CTEST(axpby, zaxpby_inc_2)
291+
{
292+
blasint i;
293+
blasint N = 9, incX = 2, incY = 2;
294+
double alpha[] = { 0.25, 0.25 }, beta[] = { 0.75, 0.75 };
295+
double x1[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
296+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
297+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
298+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
299+
double y1[] = { 2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
300+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
301+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0,
302+
2.0, 4.0, 6.0, 8.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
303+
304+
BLASFUNC(zaxpby)(&N, &alpha, x1, &incX, &beta, y1, &incY);
305+
306+
double x2[] = { 1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
307+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
308+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0,
309+
1.0, 3.0, 5.0, 7.0, 1.0, 3.0, 5.0, 7.0, 9.0 };
310+
double y2[] = { -2.0, 5.5, 6.0, 8.0, -2.0, 5.5, 6.0, 8.0, 8.0,
311+
11.5, 4.0, 6.0, 6.0, 9.5, 4.0, 6.0, -2.0, 17.5,
312+
2.0, 4.0, -2.0, 13.5, 2.0, 4.0, -2.0, 13.5, 10.0,
313+
2.0, -2.0, 9.5, 8.0, 2.0, -2.0, 9.5, 8.0, 10.0 };
314+
315+
for(i = 0; i < 4 * N; i++){
316+
ASSERT_DBL_NEAR_TOL(x2[i], x1[i], DOUBLE_EPS);
317+
ASSERT_DBL_NEAR_TOL(y2[i], y1[i], DOUBLE_EPS);
318+
}
319+
}
320+
#endif

0 commit comments

Comments
 (0)