blob: 95ec88f10ce22569081a68e04ee24efc4fd625b3 [file] [edit]
#define XBYAK_CPUMASK_N 8
#define XBYAK_CPUMASK_BITN 3
#include <xbyak/xbyak_util.h>
#include <cybozu/test.hpp>
using namespace Xbyak::util;
CYBOZU_TEST_AUTO(pattern)
{
const uint32_t bitN = XBYAK_CPUMASK_BITN;
const uint32_t bit = 1 << bitN;
for (uint32_t i = 0; i < (1 << bit); i++) {
CpuMask m;
uint32_t cnt = 0;
for (uint32_t j = 0; j < bit; j++) {
if (i & (1 << j)) {
cnt++;
CYBOZU_TEST_ASSERT(m.append(j));
}
}
CYBOZU_TEST_EQUAL(m.size(), cnt);
#if 0
printf("pattern (%3u) ", i);
for (int j = int(bit) - 1; j >= 0; j--) {
if (i & (uint64_t(1) << j)) printf("%d ", j);
}
printf("\n");
m.dump();
m.put();
#endif
uint32_t idx = 0;
for (const auto& v : m) {
CYBOZU_TEST_ASSERT(i & (1 << v));
idx++;
}
CYBOZU_TEST_EQUAL(idx, cnt);
}
}