Skip to content

Commit abb0b2c

Browse files
committed
WIP
1 parent 5eb32ad commit abb0b2c

File tree

2 files changed

+5
-59
lines changed

2 files changed

+5
-59
lines changed

include/xsimd/types/xsimd_batch_constant.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ namespace xsimd
4444
/**
4545
* @brief Generate a batch of @p integers from this @p batch_bool_constant
4646
*/
47-
constexpr batch<as_integer_t<T>, A> as_batch() const noexcept { return { static_cast<as_integer_t<T>>(Values)... }; }
47+
constexpr batch<as_integer_t<T>, A> as_batch() const noexcept
48+
{
49+
return { (Values ? as_integer_t<T>(-1) : as_integer_t<T>(0))... };
50+
}
4851
/**
4952
* @brief Generate a batch of @p batch_type from this @p batch_bool_constant
5053
*/

test/test_load_store.cpp

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -356,39 +356,10 @@ struct load_store_test
356356
auto mask = xsimd::make_batch_bool_constant<value_type, Generator, typename batch_type::arch_type>();
357357
array_type expected_masked{0};
358358

359-
std::size_t expected_pop = 0;
360-
std::size_t expected_countr_one = 0;
361-
std::size_t expected_countl_one = 0;
362-
std::size_t expected_countr_zero = 0;
363-
std::size_t expected_countl_zero = 0;
364-
uint64_t expected_bits = 0;
365-
366359
for (std::size_t i = 0; i < size; ++i)
367360
{
368361
const bool active = Generator::get(i, size);
369-
if (active)
370-
{
371-
expected_masked[i] = expected[i];
372-
expected_bits |= (uint64_t(1) << i);
373-
++expected_pop;
374-
}
375-
}
376-
377-
while (expected_countr_zero < size && !Generator::get(expected_countr_zero, size))
378-
{
379-
++expected_countr_zero;
380-
}
381-
while (expected_countl_zero < size && !Generator::get(size - 1 - expected_countl_zero, size))
382-
{
383-
++expected_countl_zero;
384-
}
385-
while (expected_countr_one < size && Generator::get(expected_countr_one, size))
386-
{
387-
++expected_countr_one;
388-
}
389-
while (expected_countl_one < size && Generator::get(size - 1 - expected_countl_one, size))
390-
{
391-
++expected_countl_one;
362+
expected_masked[i] = active ? expected[i] : value_type();
392363
}
393364

394365
b = xsimd::load(v.data(), mask, xsimd::aligned_mode());
@@ -397,34 +368,6 @@ struct load_store_test
397368
b = xsimd::load(v.data(), mask, xsimd::unaligned_mode());
398369
INFO(name, label + " unaligned");
399370
CHECK_BATCH_EQ(b, expected_masked);
400-
401-
CHECK_EQ(mask.truncated_mask(), expected_bits);
402-
CHECK_EQ(mask.popcount(), expected_pop);
403-
CHECK_EQ(mask.none(), expected_pop == 0);
404-
CHECK_EQ(mask.any(), expected_pop != 0);
405-
CHECK_EQ(mask.all(), expected_pop == size);
406-
CHECK_EQ(mask.countr_one(), expected_countr_one);
407-
CHECK_EQ(mask.countl_one(), expected_countl_one);
408-
CHECK_EQ(mask.countr_zero(), expected_countr_zero);
409-
CHECK_EQ(mask.countl_zero(), expected_countl_zero);
410-
411-
std::vector<std::size_t> indices;
412-
for (std::size_t idx = 0; idx < size; ++idx)
413-
{
414-
if (mask.get(idx))
415-
{
416-
indices.push_back(idx);
417-
}
418-
}
419-
std::vector<std::size_t> expected_indices;
420-
for (std::size_t idx = 0; idx < size; ++idx)
421-
{
422-
if (Generator::get(idx, size))
423-
{
424-
expected_indices.push_back(idx);
425-
}
426-
}
427-
CHECK_EQ(indices, expected_indices);
428371
}
429372

430373
template <class Generator, class V>

0 commit comments

Comments
 (0)