#include <iostream>
#include <cassert>
#include <climits>
using namespace std;
using uint = unsigned int;
struct Array { uint length; };
void test1() {
cout << "test1" << endl;
Array array = {1000};
uint startIndex = 100;
//uint length = 0xFFFFFFF0;
uint length = 900;
assert(startIndex <= UINT_MAX - length);
assert(0 <= startIndex && startIndex + length <= array.length);
cout << "array.length = " << array.length << endl
<< "startIndex = " << startIndex << endl
<< "length = " << length << endl
<< "startIndex + length = " << (startIndex + length) << endl;
}
void test2() {
cout << "test2" << endl;
Array array = {1000};
uint startIndex = 0xFFFFFFF0;
uint length = 100;
assert(startIndex <= UINT_MAX - length);
assert(0 <= startIndex && startIndex + length <= array.length);
cout << "array.length = " << array.length << endl
<< "startIndex = " << startIndex << endl
<< "length = " << length << endl
<< "startIndex + length = " << (startIndex + length) << endl;
}
int main() {
test1();
test2();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNsaW1pdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdXNpbmcgdWludCA9IHVuc2lnbmVkIGludDsKCnN0cnVjdCBBcnJheSB7IHVpbnQgbGVuZ3RoOyB9OwoKdm9pZCB0ZXN0MSgpIHsKCWNvdXQgPDwgInRlc3QxIiA8PCBlbmRsOwoJCglBcnJheSBhcnJheSA9IHsxMDAwfTsKCXVpbnQgc3RhcnRJbmRleCA9IDEwMDsKCS8vdWludCBsZW5ndGggPSAweEZGRkZGRkYwOwoJdWludCBsZW5ndGggPSA5MDA7CgkKCWFzc2VydChzdGFydEluZGV4IDw9IFVJTlRfTUFYIC0gbGVuZ3RoKTsKCWFzc2VydCgwIDw9IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCArIGxlbmd0aCA8PSBhcnJheS5sZW5ndGgpOwoJCgljb3V0IDw8ICJhcnJheS5sZW5ndGggPSAiIDw8IGFycmF5Lmxlbmd0aCA8PCBlbmRsCgkgICAgIDw8ICJzdGFydEluZGV4ID0gIiAgIDw8IHN0YXJ0SW5kZXggICA8PCBlbmRsCgkgICAgIDw8ICJsZW5ndGggPSAiICAgICAgIDw8IGxlbmd0aCAgICAgICA8PCBlbmRsCgkgICAgIDw8ICJzdGFydEluZGV4ICsgbGVuZ3RoID0gIiA8PCAoc3RhcnRJbmRleCArIGxlbmd0aCkgPDwgZW5kbDsKCQp9Cgp2b2lkIHRlc3QyKCkgewoJY291dCA8PCAidGVzdDIiIDw8IGVuZGw7CgkKCUFycmF5IGFycmF5ID0gezEwMDB9OwoJdWludCBzdGFydEluZGV4ID0gMHhGRkZGRkZGMDsKCXVpbnQgbGVuZ3RoID0gMTAwOwoJCglhc3NlcnQoc3RhcnRJbmRleCA8PSBVSU5UX01BWCAtIGxlbmd0aCk7Cglhc3NlcnQoMCA8PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggKyBsZW5ndGggPD0gYXJyYXkubGVuZ3RoKTsKCQoJY291dCA8PCAiYXJyYXkubGVuZ3RoID0gIiA8PCBhcnJheS5sZW5ndGggPDwgZW5kbAoJICAgICA8PCAic3RhcnRJbmRleCA9ICIgICA8PCBzdGFydEluZGV4ICAgPDwgZW5kbAoJICAgICA8PCAibGVuZ3RoID0gIiAgICAgICA8PCBsZW5ndGggICAgICAgPDwgZW5kbAoJICAgICA8PCAic3RhcnRJbmRleCArIGxlbmd0aCA9ICIgPDwgKHN0YXJ0SW5kZXggKyBsZW5ndGgpIDw8IGVuZGw7CgkKfQoKCmludCBtYWluKCkgewoJdGVzdDEoKTsKCXRlc3QyKCk7CglyZXR1cm4gMDsKfQ==