Conditional addition and subtraction for all supported data types. Test intrinsics: npyv_ifadd_##SFX, npyv_ifsub_##SFX
(self)
| 1253 | assert vsum == data_sum |
| 1254 | |
| 1255 | def test_mask_conditional(self): |
| 1256 | """ |
| 1257 | Conditional addition and subtraction for all supported data types. |
| 1258 | Test intrinsics: |
| 1259 | npyv_ifadd_##SFX, npyv_ifsub_##SFX |
| 1260 | """ |
| 1261 | vdata_a = self.load(self._data()) |
| 1262 | vdata_b = self.load(self._data(reverse=True)) |
| 1263 | true_mask = self.cmpeq(self.zero(), self.zero()) |
| 1264 | false_mask = self.cmpneq(self.zero(), self.zero()) |
| 1265 | |
| 1266 | data_sub = self.sub(vdata_b, vdata_a) |
| 1267 | ifsub = self.ifsub(true_mask, vdata_b, vdata_a, vdata_b) |
| 1268 | assert ifsub == data_sub |
| 1269 | ifsub = self.ifsub(false_mask, vdata_a, vdata_b, vdata_b) |
| 1270 | assert ifsub == vdata_b |
| 1271 | |
| 1272 | data_add = self.add(vdata_b, vdata_a) |
| 1273 | ifadd = self.ifadd(true_mask, vdata_b, vdata_a, vdata_b) |
| 1274 | assert ifadd == data_add |
| 1275 | ifadd = self.ifadd(false_mask, vdata_a, vdata_b, vdata_b) |
| 1276 | assert ifadd == vdata_b |
| 1277 | |
| 1278 | if not self._is_fp(): |
| 1279 | return |
| 1280 | data_div = self.div(vdata_b, vdata_a) |
| 1281 | ifdiv = self.ifdiv(true_mask, vdata_b, vdata_a, vdata_b) |
| 1282 | assert ifdiv == data_div |
| 1283 | ifdivz = self.ifdivz(true_mask, vdata_b, vdata_a) |
| 1284 | assert ifdivz == data_div |
| 1285 | ifdiv = self.ifdiv(false_mask, vdata_a, vdata_b, vdata_b) |
| 1286 | assert ifdiv == vdata_b |
| 1287 | ifdivz = self.ifdivz(false_mask, vdata_a, vdata_b) |
| 1288 | assert ifdivz == self.zero() |
| 1289 | |
| 1290 | bool_sfx = ("b8", "b16", "b32", "b64") |
| 1291 | int_sfx = ("u8", "s8", "u16", "s16", "u32", "s32", "u64", "s64") |