1 #include "ComplexTestsF64.h" 2 #include <stdio.h> 3 #include "Error.h" 4 5 #define SNR_THRESHOLD 310 6 7 #define REL_ERROR (3.0e-15) 8 9 /* 10 void ComplexTestsF64::test_cmplx_conj_f64() 11 { 12 const float64_t *inp1=input1.ptr(); 13 float64_t *outp=output.ptr(); 14 15 16 arm_cmplx_conj_f64(inp1,outp,input1.nbSamples() >> 1 ); 17 18 ASSERT_EMPTY_TAIL(output); 19 20 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 21 22 ASSERT_REL_ERROR(output,ref,REL_ERROR); 23 24 25 } 26 27 28 void ComplexTestsF64::test_cmplx_dot_prod_f64() 29 { 30 float64_t re,im; 31 32 const float64_t *inp1=input1.ptr(); 33 const float64_t *inp2=input2.ptr(); 34 float64_t *outp=output.ptr(); 35 36 arm_cmplx_dot_prod_f64(inp1,inp2,input1.nbSamples() >> 1,&re,&im); 37 38 outp[0] = re; 39 outp[1] = im; 40 41 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 42 43 ASSERT_REL_ERROR(output,ref,REL_ERROR); 44 45 ASSERT_EMPTY_TAIL(output); 46 } 47 */ test_cmplx_mag_f64()48 void ComplexTestsF64::test_cmplx_mag_f64() 49 { 50 const float64_t *inp1=input1.ptr(); 51 float64_t *outp=output.ptr(); 52 53 arm_cmplx_mag_f64(inp1,outp,input1.nbSamples() >> 1 ); 54 55 ASSERT_EMPTY_TAIL(output); 56 57 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 58 59 ASSERT_REL_ERROR(output,ref,REL_ERROR); 60 } 61 test_cmplx_mag_squared_f64()62 void ComplexTestsF64::test_cmplx_mag_squared_f64() 63 { 64 const float64_t *inp1=input1.ptr(); 65 float64_t *outp=output.ptr(); 66 67 arm_cmplx_mag_squared_f64(inp1,outp,input1.nbSamples() >> 1 ); 68 69 ASSERT_EMPTY_TAIL(output); 70 71 72 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 73 74 ASSERT_REL_ERROR(output,ref,REL_ERROR); 75 } 76 test_cmplx_mult_cmplx_f64()77 void ComplexTestsF64::test_cmplx_mult_cmplx_f64() 78 { 79 const float64_t *inp1=input1.ptr(); 80 const float64_t *inp2=input2.ptr(); 81 float64_t *outp=output.ptr(); 82 83 arm_cmplx_mult_cmplx_f64(inp1,inp2,outp,input1.nbSamples() >> 1 ); 84 85 ASSERT_EMPTY_TAIL(output); 86 87 88 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 89 90 ASSERT_REL_ERROR(output,ref,REL_ERROR); 91 } 92 93 /* 94 void ComplexTestsF64::test_cmplx_mult_real_f64() 95 { 96 const float64_t *inp1=input1.ptr(); 97 const float64_t *inp2=input2.ptr(); 98 float64_t *outp=output.ptr(); 99 100 arm_cmplx_mult_real_f64(inp1,inp2,outp,input1.nbSamples() >> 1 ); 101 102 ASSERT_EMPTY_TAIL(output); 103 104 105 ASSERT_SNR(output,ref,(float64_t)SNR_THRESHOLD); 106 107 ASSERT_REL_ERROR(output,ref,REL_ERROR); 108 } 109 */ setUp(Testing::testID_t id,std::vector<Testing::param_t> & params,Client::PatternMgr * mgr)110 void ComplexTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr) 111 { 112 113 Testing::nbSamples_t nb=MAX_NB_SAMPLES; 114 (void)params; 115 116 117 switch(id) 118 { 119 case ComplexTestsF64::TEST_CMPLX_CONJ_F64_1: 120 nb = 2; 121 ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1); 122 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 123 124 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 125 break; 126 case ComplexTestsF64::TEST_CMPLX_CONJ_F64_2: 127 nb = 4; 128 ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1); 129 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 130 131 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 132 break; 133 case ComplexTestsF64::TEST_CMPLX_CONJ_F64_3: 134 nb = 5; 135 ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1); 136 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 137 138 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 139 break; 140 case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_4: 141 nb = 2; 142 ref.reload(ComplexTestsF64::REF_DOT_PROD_3_F64_ID,mgr); 143 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 144 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 145 146 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 147 break; 148 149 case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_5: 150 nb = 4; 151 ref.reload(ComplexTestsF64::REF_DOT_PROD_4N_F64_ID,mgr); 152 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 153 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 154 155 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 156 break; 157 158 case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_6: 159 nb = 5; 160 ref.reload(ComplexTestsF64::REF_DOT_PROD_4N1_F64_ID,mgr); 161 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 162 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 163 164 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 165 break; 166 case ComplexTestsF64::TEST_CMPLX_MAG_F64_7: 167 nb = 2; 168 ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb); 169 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 170 171 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 172 break; 173 case ComplexTestsF64::TEST_CMPLX_MAG_F64_8: 174 nb = 4; 175 ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb); 176 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 177 178 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 179 break; 180 case ComplexTestsF64::TEST_CMPLX_MAG_F64_9: 181 nb = 5; 182 ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb); 183 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 184 185 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 186 break; 187 case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_10: 188 nb = 2; 189 ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb); 190 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 191 192 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 193 break; 194 case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_11: 195 nb = 4; 196 ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb); 197 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 198 199 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 200 break; 201 case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_12: 202 nb = 5; 203 ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb); 204 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 205 206 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 207 break; 208 case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_13: 209 nb = 2; 210 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1); 211 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 212 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 213 214 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 215 break; 216 case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_14: 217 nb = 4; 218 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1); 219 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 220 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 221 222 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 223 break; 224 case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_15: 225 nb = 5; 226 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1); 227 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 228 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 229 230 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 231 break; 232 case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_16: 233 nb = 2; 234 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1); 235 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 236 input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb); 237 238 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 239 break; 240 case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_17: 241 nb = 4; 242 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1); 243 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 244 input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb); 245 246 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 247 break; 248 case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_18: 249 nb = 5; 250 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1); 251 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 252 input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb); 253 254 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 255 break; 256 257 case ComplexTestsF64::TEST_CMPLX_CONJ_F64_19: 258 ref.reload(ComplexTestsF64::REF_CONJ_F64_ID,mgr,nb << 1); 259 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 260 261 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 262 break; 263 264 case ComplexTestsF64::TEST_CMPLX_DOT_PROD_F64_20: 265 ref.reload(ComplexTestsF64::REF_DOT_PROD_LONG_F64_ID,mgr); 266 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 267 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 268 269 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 270 break; 271 272 case ComplexTestsF64::TEST_CMPLX_MAG_F64_21: 273 ref.reload(ComplexTestsF64::REF_MAG_F64_ID,mgr,nb); 274 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 275 276 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 277 break; 278 279 case ComplexTestsF64::TEST_CMPLX_MAG_SQUARED_F64_22: 280 ref.reload(ComplexTestsF64::REF_MAG_SQUARED_F64_ID,mgr,nb); 281 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 282 283 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 284 break; 285 286 case ComplexTestsF64::TEST_CMPLX_MULT_CMPLX_F64_23: 287 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_CMPLX_F64_ID,mgr,nb << 1); 288 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 289 input2.reload(ComplexTestsF64::INPUT2_F64_ID,mgr,nb << 1); 290 291 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 292 break; 293 294 case ComplexTestsF64::TEST_CMPLX_MULT_REAL_F64_24: 295 ref.reload(ComplexTestsF64::REF_CMPLX_MULT_REAL_F64_ID,mgr,nb << 1); 296 input1.reload(ComplexTestsF64::INPUT1_F64_ID,mgr,nb << 1); 297 input2.reload(ComplexTestsF64::INPUT3_F64_ID,mgr,nb); 298 299 output.create(ref.nbSamples(),ComplexTestsF64::OUT_SAMPLES_F64_ID,mgr); 300 break; 301 302 } 303 304 } 305 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)306 void ComplexTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 307 { 308 (void)id; 309 output.dump(mgr); 310 } 311