| 7 | using namespace reflex; |
| 8 | |
| 9 | int main() |
| 10 | { |
| 11 | static Bits digit('0', '9'); // bits '0' (48th bit) to '9' (57th bit) |
| 12 | static Bits upper('A', 'Z'); // bits 'A' (65th bit) to 'Z' (92th bit) |
| 13 | static Bits lower('a', 'z'); // bits 'a' (97th bit) to 'z' (122th bit) |
| 14 | static Bits alnum(digit | upper | lower); |
| 15 | if (upper.intersects(lower) == false) |
| 16 | std::cout << "upper and lower are disjoint\n"; |
| 17 | // reflex::Bits alnum = digit | upper | lower; |
| 18 | if (alnum.contains(digit) == true) |
| 19 | std::cout << "digit is a subset of alnum\n"; |
| 20 | if (alnum['_'] == false) |
| 21 | std::cout << "_ is not in alnum\n"; |
| 22 | alnum['_'] = true; |
| 23 | if (alnum['_'] == true) |
| 24 | std::cout << "_ is in updated alnum\n"; |
| 25 | alnum.lshift().rshift(); |
| 26 | std::cout << alnum.count() << " bits in alnum\n"; |
| 27 | for (size_t i = alnum.find_first(); i != reflex::Bits::npos; i = alnum.find_next(i)) |
| 28 | std::cout << (char)i; |
| 29 | std::cout << std::endl; |
| 30 | |
| 31 | assert(digit.count() == 10); |
| 32 | assert(alnum.count() == 63); |
| 33 | |
| 34 | Bits alpha(lower); |
| 35 | alpha |= upper; |
| 36 | |
| 37 | assert(alpha.contains(lower) == true && alpha.contains(upper) == true); |
| 38 | assert(alpha.intersects(lower) == true); |
| 39 | assert(lower.intersects(upper) == false); |
| 40 | |
| 41 | Bits bucket; |
| 42 | bucket.swap(alpha); |
| 43 | bucket -= upper; |
| 44 | bucket -= digit; |
| 45 | |
| 46 | assert(bucket == lower); |
| 47 | assert(alpha.any() == false); |
| 48 | assert(bucket.any() == true); |
| 49 | assert(bucket.all() == false); |
| 50 | |
| 51 | for (size_t i = bucket.find_first(); i != Bits::npos; i = bucket.find_next(i)) |
| 52 | std::cout << (char)i; |
| 53 | std::cout << std::endl; |
| 54 | |
| 55 | return 0; |
| 56 | } |
nothing calls this directly
no test coverage detected