#include #include #include typedef std::vector intvector; intvector makevector(const int *tests, unsigned ix) { intvector v; while (ix) { if (ix&1) v.push_back(*tests); tests++; ix>>=1; } return v; } template void printiter(I i, I last) { if (i==last) printf(" --------"); else printf(" %08x", *i); } int main(int,char**) { int tests[]= {-0x808, 0, 0x808, 0x626200-0x808, 0x626200, 0x626200+0x808, 0xacac00-0x808, 0xacac00, 0xacac00+0x808}; const unsigned ntests= sizeof(tests)/sizeof(*tests); const unsigned nsets= 1<R) max(x>=R) min(x>=R) min(x>R) max(xy; }); auto zcc= zc==v.rend() ? v.end() : v.begin()+(v.size()-1-(zc-v.rbegin())); auto zd= std::find_if(v.rbegin(), v.rend(), [x](int y) { return x>=y; }); auto zdd= zd==v.rend() ? v.end() : v.begin()+(v.size()-1-(zd-v.rbegin())); if (lb!=za) printf("%d:%d:lb!=za\n", setix, i); if (ub!=zb) printf("%d:%d:ub!=zb\n", setix, i); if (yb!=zcc) printf("%d:%d:yb!=zc\n", setix, i); if (xb!=zdd) printf("%d:%d:xb!=zd\n", setix, i); if (setix==0x92) { // make output look like xlb.cpp printf("%08x . . . ", x); printiter(lb, v.end()); printiter(ub, v.end()); printiter(yb, v.end()); printiter(xb, v.end()); printiter(za, v.end()); printiter(zb, v.end()); printiter(zcc, v.end()); printiter(zdd, v.end()); printf("\n"); } n++; } } printf("%d tested\n", n); return 0; }