@@ -49,6 +49,140 @@ CTEST(amax, samax){
4949 ASSERT_DBL_NEAR_TOL ((double )(tr_max ), (double )(te_max ), SINGLE_EPS );
5050}
5151
52+ CTEST (drotmg ,rotmg ){
53+ double te_d1 , tr_d1 ;
54+ double te_d2 , tr_d2 ;
55+ double te_x1 , tr_x1 ;
56+ double te_y1 , tr_y1 ;
57+ double te_param [5 ];
58+ double tr_param [5 ];
59+ int i = 0 ;
60+ // original test case for libGoto bug fixed by feb2014 rewrite
61+ te_d1 = 0.21149573940783739 ;
62+ te_d2 = 0.046892057172954082 ;
63+ te_x1 = -0.42272687517106533 ;
64+ te_y1 = 0.42211309121921659 ;
65+
66+
67+ for (i = 0 ; i < 5 ; i ++ ){
68+ te_param [i ]= tr_param [i ]= 0.0 ;
69+ }
70+
71+ //reference values as calulated by netlib blas
72+
73+ tr_d1 = 0.1732048 ;
74+ tr_d2 = 0.03840234 ;
75+ tr_x1 = -0.516180 ;
76+ tr_y1 = 0.422113 ;
77+ tr_d1 = 0.17320483687975 ;
78+ tr_d2 = 0.03840233915037 ;
79+ tr_x1 = -0.51618034832329 ;
80+ tr_y1 = 0.42211309121922 ;
81+
82+ tr_param [0 ]= 0.0 ;
83+ tr_param [1 ]= 0.0 ;
84+ tr_param [2 ]= 0.99854803659786 ;
85+ tr_param [3 ]= -0.22139439665872 ;
86+ tr_param [4 ]= 0.0 ;
87+
88+ BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
89+ ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
90+ ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
91+ ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
92+ ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
93+
94+ for (i = 0 ; i < 5 ; i ++ ){
95+ ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
96+ }
97+ }
98+
99+ CTEST (drotmg ,rotmg_issue1452 ){
100+ double te_d1 , tr_d1 ;
101+ double te_d2 , tr_d2 ;
102+ double te_x1 , tr_x1 ;
103+ double te_y1 , tr_y1 ;
104+ double te_param [5 ];
105+ double tr_param [5 ];
106+ int i = 0 ;
107+
108+ // from issue #1452, buggy version returned 0.000244 for param[3]
109+ te_d1 = 5.9e-8 ;
110+ te_d2 = 5.960464e-8 ;
111+ te_x1 = 1.0 ;
112+ te_y1 = 150.0 ;
113+
114+ for (i = 0 ; i < 5 ; i ++ ){
115+ te_param [i ]= tr_param [i ]= 0.0 ;
116+ }
117+
118+ //reference values as calulated by netlib blas
119+ tr_d1 = 0.99995592822897 ;
120+ tr_d2 = 0.98981219860583 ;
121+ tr_x1 = 0.03662270484346 ;
122+ tr_y1 = 150.000000000000 ;
123+
124+ tr_param [0 ]= -1.0 ;
125+ tr_param [1 ]= 0.00000161109346 ;
126+ tr_param [2 ]= -0.00024414062500 ;
127+ tr_param [3 ]= 1.0 ;
128+ tr_param [4 ]= 0.00000162760417 ;
129+
130+ //OpenBLAS
131+ BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
132+
133+ ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
134+ ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
135+ ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
136+ ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
137+
138+ for (i = 0 ; i < 5 ; i ++ ){
139+ ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
140+ }
141+
142+ }
143+
144+ CTEST (drotmg , rotmg_D1eqD2_X1eqX2 ){
145+ double te_d1 , tr_d1 ;
146+ double te_d2 , tr_d2 ;
147+ double te_x1 , tr_x1 ;
148+ double te_y1 , tr_y1 ;
149+ double te_param [5 ];
150+ double tr_param [5 ];
151+ int i = 0 ;
152+ te_d1 = tr_d1 = 2. ;
153+ te_d2 = tr_d2 = 2. ;
154+ te_x1 = tr_x1 = 8. ;
155+ te_y1 = tr_y1 = 8. ;
156+
157+ for (i = 0 ; i < 5 ; i ++ ){
158+ te_param [i ]= tr_param [i ]= 0.0 ;
159+ }
160+
161+ //reference values as calulated by netlib blas
162+ tr_d1 = 1.0 ;
163+ tr_d2 = 1.0 ;
164+ tr_x1 = 16.0 ;
165+ tr_y1 = 8.0 ;
166+
167+ tr_param [0 ]= 1.0 ;
168+ tr_param [1 ]= 1.0 ;
169+ tr_param [2 ]= 0.0 ;
170+ tr_param [3 ]= 0.0 ;
171+ tr_param [4 ]= 1.0 ;
172+
173+ //OpenBLAS
174+ BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
175+
176+ ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
177+ ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
178+ ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
179+ ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
180+
181+ for (i = 0 ; i < 5 ; i ++ ){
182+ ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
183+ }
184+ }
185+
52186int main (int argc , const char * * argv ){
53187
54188 CTEST_ADD (amax , samax );
0 commit comments