1 #include "ComplexTestsF32.h" 2 #include <stdio.h> 3 #include "Error.h" 4 5 #define SNR_THRESHOLD 120 6 7 #define REL_ERROR (7.0e-6) 8 test_cmplx_conj_f32()9 void ComplexTestsF32::test_cmplx_conj_f32() 10 { 11 const float32_t *inp1=input1.ptr(); 12 float32_t *outp=output.ptr(); 13 14 15 arm_cmplx_conj_f32(inp1,outp,input1.nbSamples() >> 1 ); 16 17 ASSERT_EMPTY_TAIL(output); 18 19 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 20 21 ASSERT_REL_ERROR(output,ref,REL_ERROR); 22 23 24 } 25 26 test_cmplx_dot_prod_f32()27 void ComplexTestsF32::test_cmplx_dot_prod_f32() 28 { 29 float32_t re,im; 30 31 const float32_t *inp1=input1.ptr(); 32 const float32_t *inp2=input2.ptr(); 33 float32_t *outp=output.ptr(); 34 35 arm_cmplx_dot_prod_f32(inp1,inp2,input1.nbSamples() >> 1,&re,&im); 36 37 outp[0] = re; 38 outp[1] = im; 39 40 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 41 42 ASSERT_REL_ERROR(output,ref,REL_ERROR); 43 44 ASSERT_EMPTY_TAIL(output); 45 } 46 test_cmplx_mag_f32()47 void ComplexTestsF32::test_cmplx_mag_f32() 48 { 49 const float32_t *inp1=input1.ptr(); 50 float32_t *outp=output.ptr(); 51 52 arm_cmplx_mag_f32(inp1,outp,input1.nbSamples() >> 1 ); 53 54 ASSERT_EMPTY_TAIL(output); 55 56 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 57 58 ASSERT_REL_ERROR(output,ref,REL_ERROR); 59 } 60 test_cmplx_mag_squared_f32()61 void ComplexTestsF32::test_cmplx_mag_squared_f32() 62 { 63 const float32_t *inp1=input1.ptr(); 64 float32_t *outp=output.ptr(); 65 66 arm_cmplx_mag_squared_f32(inp1,outp,input1.nbSamples() >> 1 ); 67 68 ASSERT_EMPTY_TAIL(output); 69 70 71 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 72 73 ASSERT_REL_ERROR(output,ref,REL_ERROR); 74 } 75 test_cmplx_mult_cmplx_f32()76 void ComplexTestsF32::test_cmplx_mult_cmplx_f32() 77 { 78 const float32_t *inp1=input1.ptr(); 79 const float32_t *inp2=input2.ptr(); 80 float32_t *outp=output.ptr(); 81 82 arm_cmplx_mult_cmplx_f32(inp1,inp2,outp,input1.nbSamples() >> 1 ); 83 84 ASSERT_EMPTY_TAIL(output); 85 86 87 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 88 89 ASSERT_REL_ERROR(output,ref,REL_ERROR); 90 } 91 test_cmplx_mult_real_f32()92 void ComplexTestsF32::test_cmplx_mult_real_f32() 93 { 94 const float32_t *inp1=input1.ptr(); 95 const float32_t *inp2=input2.ptr(); 96 float32_t *outp=output.ptr(); 97 98 arm_cmplx_mult_real_f32(inp1,inp2,outp,input1.nbSamples() >> 1 ); 99 100 ASSERT_EMPTY_TAIL(output); 101 102 103 ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD); 104 105 ASSERT_REL_ERROR(output,ref,REL_ERROR); 106 } 107 setUp(Testing::testID_t id,std::vector<Testing::param_t> & params,Client::PatternMgr * mgr)108 void ComplexTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr) 109 { 110 111 Testing::nbSamples_t nb=MAX_NB_SAMPLES; 112 (void)params; 113 114 115 switch(id) 116 { 117 case ComplexTestsF32::TEST_CMPLX_CONJ_F32_1: 118 nb = 3; 119 ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1); 120 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 121 122 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 123 break; 124 case ComplexTestsF32::TEST_CMPLX_CONJ_F32_2: 125 nb = 8; 126 ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1); 127 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 128 129 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 130 break; 131 case ComplexTestsF32::TEST_CMPLX_CONJ_F32_3: 132 nb = 11; 133 ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1); 134 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 135 136 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 137 break; 138 case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_4: 139 nb = 3; 140 ref.reload(ComplexTestsF32::REF_DOT_PROD_3_F32_ID,mgr); 141 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 142 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 143 144 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 145 break; 146 147 case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_5: 148 nb = 8; 149 ref.reload(ComplexTestsF32::REF_DOT_PROD_4N_F32_ID,mgr); 150 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 151 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 152 153 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 154 break; 155 156 case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_6: 157 nb = 11; 158 ref.reload(ComplexTestsF32::REF_DOT_PROD_4N1_F32_ID,mgr); 159 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 160 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 161 162 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 163 break; 164 case ComplexTestsF32::TEST_CMPLX_MAG_F32_7: 165 nb = 3; 166 ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb); 167 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 168 169 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 170 break; 171 case ComplexTestsF32::TEST_CMPLX_MAG_F32_8: 172 nb = 8; 173 ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb); 174 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 175 176 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 177 break; 178 case ComplexTestsF32::TEST_CMPLX_MAG_F32_9: 179 nb = 11; 180 ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb); 181 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 182 183 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 184 break; 185 case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_10: 186 nb = 3; 187 ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb); 188 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 189 190 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 191 break; 192 case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_11: 193 nb = 8; 194 ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb); 195 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 196 197 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 198 break; 199 case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_12: 200 nb = 11; 201 ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb); 202 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 203 204 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 205 break; 206 case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_13: 207 nb = 3; 208 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1); 209 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 210 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 211 212 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 213 break; 214 case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_14: 215 nb = 8; 216 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1); 217 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 218 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 219 220 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 221 break; 222 case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_15: 223 nb = 11; 224 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1); 225 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 226 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 227 228 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 229 break; 230 case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_16: 231 nb = 3; 232 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1); 233 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 234 input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb); 235 236 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 237 break; 238 case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_17: 239 nb = 8; 240 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1); 241 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 242 input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb); 243 244 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 245 break; 246 case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_18: 247 nb = 11; 248 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1); 249 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 250 input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb); 251 252 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 253 break; 254 255 case ComplexTestsF32::TEST_CMPLX_CONJ_F32_19: 256 ref.reload(ComplexTestsF32::REF_CONJ_F32_ID,mgr,nb << 1); 257 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 258 259 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 260 break; 261 262 case ComplexTestsF32::TEST_CMPLX_DOT_PROD_F32_20: 263 ref.reload(ComplexTestsF32::REF_DOT_PROD_LONG_F32_ID,mgr); 264 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 265 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 266 267 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 268 break; 269 270 case ComplexTestsF32::TEST_CMPLX_MAG_F32_21: 271 ref.reload(ComplexTestsF32::REF_MAG_F32_ID,mgr,nb); 272 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 273 274 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 275 break; 276 277 case ComplexTestsF32::TEST_CMPLX_MAG_SQUARED_F32_22: 278 ref.reload(ComplexTestsF32::REF_MAG_SQUARED_F32_ID,mgr,nb); 279 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 280 281 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 282 break; 283 284 case ComplexTestsF32::TEST_CMPLX_MULT_CMPLX_F32_23: 285 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_CMPLX_F32_ID,mgr,nb << 1); 286 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 287 input2.reload(ComplexTestsF32::INPUT2_F32_ID,mgr,nb << 1); 288 289 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 290 break; 291 292 case ComplexTestsF32::TEST_CMPLX_MULT_REAL_F32_24: 293 ref.reload(ComplexTestsF32::REF_CMPLX_MULT_REAL_F32_ID,mgr,nb << 1); 294 input1.reload(ComplexTestsF32::INPUT1_F32_ID,mgr,nb << 1); 295 input2.reload(ComplexTestsF32::INPUT3_F32_ID,mgr,nb); 296 297 output.create(ref.nbSamples(),ComplexTestsF32::OUT_SAMPLES_F32_ID,mgr); 298 break; 299 300 } 301 302 } 303 tearDown(Testing::testID_t id,Client::PatternMgr * mgr)304 void ComplexTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) 305 { 306 (void)id; 307 output.dump(mgr); 308 } 309