@@ -53,7 +53,7 @@ CTEST (drotmg,rotmg)
53
53
te_param [i ]= tr_param [i ]= 0.0 ;
54
54
}
55
55
56
- //reference values as calulated by netlib blas
56
+ //reference values as calculated by netlib blas
57
57
58
58
tr_d1 = 0.1732048 ;
59
59
tr_d2 = 0.03840234 ;
@@ -71,13 +71,13 @@ CTEST (drotmg,rotmg)
71
71
tr_param [4 ]= 0.0 ;
72
72
73
73
BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
74
- ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
75
- ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
76
- ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
77
- ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
74
+ ASSERT_DBL_NEAR_TOL (tr_d1 , te_d1 , DOUBLE_EPS );
75
+ ASSERT_DBL_NEAR_TOL (tr_d2 , te_d2 , DOUBLE_EPS );
76
+ ASSERT_DBL_NEAR_TOL (tr_x1 , te_x1 , DOUBLE_EPS );
77
+ ASSERT_DBL_NEAR_TOL (tr_y1 , te_y1 , DOUBLE_EPS );
78
78
79
79
for (i = 0 ; i < 5 ; i ++ ){
80
- ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
80
+ ASSERT_DBL_NEAR_TOL (tr_param [i ], te_param [i ], DOUBLE_EPS );
81
81
}
82
82
}
83
83
@@ -91,7 +91,7 @@ CTEST (drotmg,rotmg_issue1452)
91
91
double tr_param [5 ];
92
92
int i = 0 ;
93
93
94
- // from issue #1452, buggy version returned 0.000244 for param[3]
94
+ // from issue #1452
95
95
te_d1 = 5.9e-8 ;
96
96
te_d2 = 5.960464e-8 ;
97
97
te_x1 = 1.0 ;
@@ -100,8 +100,8 @@ CTEST (drotmg,rotmg_issue1452)
100
100
for (i = 0 ; i < 5 ; i ++ ){
101
101
te_param [i ]= tr_param [i ]= 0.0 ;
102
102
}
103
-
104
- //reference values as calulated by netlib blas
103
+ te_param [ 3 ] = 1. / 4096. ;
104
+ //reference values as calculated by gonum blas with rotmg rewritten to Hopkins' algorithm
105
105
tr_d1 = 0.99995592822897 ;
106
106
tr_d2 = 0.98981219860583 ;
107
107
tr_x1 = 0.03662270484346 ;
@@ -110,19 +110,19 @@ CTEST (drotmg,rotmg_issue1452)
110
110
tr_param [0 ]= -1.0 ;
111
111
tr_param [1 ]= 0.00000161109346 ;
112
112
tr_param [2 ]= -0.00024414062500 ;
113
- tr_param [3 ]= 1.0 ;
113
+ tr_param [3 ]= 0.00024414062500 ;
114
114
tr_param [4 ]= 0.00000162760417 ;
115
115
116
116
//OpenBLAS
117
117
BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
118
118
119
- ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
120
- ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
121
- ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
122
- ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
119
+ ASSERT_DBL_NEAR_TOL (tr_d1 , te_d1 , DOUBLE_EPS );
120
+ ASSERT_DBL_NEAR_TOL (tr_d2 , te_d2 , DOUBLE_EPS );
121
+ ASSERT_DBL_NEAR_TOL (tr_x1 , te_x1 , DOUBLE_EPS );
122
+ ASSERT_DBL_NEAR_TOL (tr_y1 , te_y1 , DOUBLE_EPS );
123
123
124
124
for (i = 0 ; i < 5 ; i ++ ){
125
- ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
125
+ ASSERT_DBL_NEAR_TOL (tr_param [i ], te_param [i ], DOUBLE_EPS );
126
126
}
127
127
128
128
}
@@ -145,7 +145,7 @@ CTEST(drotmg, rotmg_D1eqD2_X1eqX2)
145
145
te_param [i ]= tr_param [i ]= 0.0 ;
146
146
}
147
147
148
- //reference values as calulated by netlib blas
148
+ //reference values as calculated by netlib blas
149
149
tr_d1 = 1.0 ;
150
150
tr_d2 = 1.0 ;
151
151
tr_x1 = 16.0 ;
@@ -160,12 +160,47 @@ CTEST(drotmg, rotmg_D1eqD2_X1eqX2)
160
160
//OpenBLAS
161
161
BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
162
162
163
- ASSERT_DBL_NEAR_TOL (te_d1 , tr_d1 , DOUBLE_EPS );
164
- ASSERT_DBL_NEAR_TOL (te_d2 , tr_d2 , DOUBLE_EPS );
165
- ASSERT_DBL_NEAR_TOL (te_x1 , tr_x1 , DOUBLE_EPS );
166
- ASSERT_DBL_NEAR_TOL (te_y1 , tr_y1 , DOUBLE_EPS );
163
+ ASSERT_DBL_NEAR_TOL (tr_d1 , te_d1 , DOUBLE_EPS );
164
+ ASSERT_DBL_NEAR_TOL (tr_d2 , te_d2 , DOUBLE_EPS );
165
+ ASSERT_DBL_NEAR_TOL (tr_x1 , te_x1 , DOUBLE_EPS );
166
+ ASSERT_DBL_NEAR_TOL (tr_y1 , te_y1 , DOUBLE_EPS );
167
+
168
+ for (i = 0 ; i < 5 ; i ++ ){
169
+ ASSERT_DBL_NEAR_TOL (tr_param [i ], te_param [i ], DOUBLE_EPS );
170
+ }
171
+ }
172
+
173
+ CTEST (drotmg , drotmg_D1_big_D2_big_flag_zero )
174
+ {
175
+ double te_d1 , tr_d1 ;
176
+ double te_d2 , tr_d2 ;
177
+ double te_x1 , tr_x1 ;
178
+ double te_y1 , tr_y1 ;
179
+ double te_param [5 ]= {1. ,4096. ,-4096. ,1. ,4096. };
180
+ double tr_param [5 ]= {-1. ,4096. ,-3584. ,1792. ,4096. };
181
+ int i = 0 ;
182
+ te_d1 = tr_d1 = 1600000000. ;
183
+ te_d2 = tr_d2 = 800000000. ;
184
+ te_x1 = tr_x1 = 8. ;
185
+ te_y1 = tr_y1 = 7. ;
186
+
187
+
188
+ //reference values as calculated by gonum
189
+ tr_d1 = 68.96627824858757 ;
190
+ tr_d2 = 34.483139124293785 ;
191
+ tr_x1 = 45312. ;
192
+ tr_y1 = 7.0 ;
193
+
194
+
195
+ //OpenBLAS
196
+ BLASFUNC (drotmg )(& te_d1 , & te_d2 , & te_x1 , & te_y1 , te_param );
197
+
198
+ ASSERT_DBL_NEAR_TOL (tr_d1 , te_d1 , DOUBLE_EPS );
199
+ ASSERT_DBL_NEAR_TOL (tr_d2 , te_d2 , DOUBLE_EPS );
200
+ ASSERT_DBL_NEAR_TOL (tr_x1 , te_x1 , DOUBLE_EPS );
201
+ ASSERT_DBL_NEAR_TOL (tr_y1 , te_y1 , DOUBLE_EPS );
167
202
168
203
for (i = 0 ; i < 5 ; i ++ ){
169
- ASSERT_DBL_NEAR_TOL (te_param [i ], tr_param [i ], DOUBLE_EPS );
204
+ ASSERT_DBL_NEAR_TOL (tr_param [i ], te_param [i ], DOUBLE_EPS );
170
205
}
171
206
}
0 commit comments