void () { checkAdd(empty(), empty(), INT64, "{}"); checkAdd(empty(), point(0), INT64, "{}"); checkAdd(empty(), range(0, 10), INT64, "{}"); checkAdd(empty(), range(0, 10).join(range(15, 20)), INT64, "{}"); checkAdd(point(5), point(10), INT32, "{15}"); checkAdd(point(Integer.MAX_VALUE), point(Integer.MAX_VALUE), INT32, "{-2}"); checkAdd(point(Integer.MAX_VALUE), point(Integer.MAX_VALUE), INT64, "{" + 0xFFFF_FFFEL + "}"); checkAdd(range(0, 10), point(10), INT32, "{10..20}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), point(1), INT64, "{2147483638..2147483648}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), point(1), INT32, "{Integer.MIN_VALUE, 2147483638..Integer.MAX_VALUE}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), point(10), INT32, "{Integer.MIN_VALUE..-2147483639, Integer.MAX_VALUE}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), point(11), INT32, "{Integer.MIN_VALUE..-2147483638}"); checkAdd(range(0, 10), range(20, 30), INT64, "{20..40}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), range(0, 10), INT64, "{2147483637..2147483657}"); checkAdd(range(Integer.MAX_VALUE - 10, Integer.MAX_VALUE), range(0, 10), INT32, "{Integer.MIN_VALUE..-2147483639, 2147483637..Integer.MAX_VALUE}"); checkAdd(range(10, 20).join(range(40, 50)), range(0, 3).join(range(5, 7)), INT64, "{10..27, 40..57}"); checkAdd(range(-1, 10).mul(point(2), INT32), point(3), INT32, "{1..23}: odd"); checkAdd(range(-1, 10).mul(point(2), INT32), point(-10), INT32, "{-12..10}: even"); checkAdd(range(-1, 10).mul(point(3), INT32), point(-1), INT32, "{-4..29}: <2> mod 3"); checkAdd(point(10), range(-1, 10).mul(point(2), INT32), INT32, "{8..30}: even"); checkAdd(range(-1, 10).mul(point(2), INT32), range(-1, 10).mul(point(2), INT32), INT32, "{-4..40}: even"); LongRangeSet m1to10by3plus1 = range(-1, 10).mul(point(3), INT32).plus(point(1), INT32); checkAdd(m1to10by3plus1, m1to10by3plus1, INT32, "{-4..62}: <2> mod 3"); LongRangeSet intDomain = range(Integer.MIN_VALUE, Integer.MAX_VALUE); assertEquals(intDomain, intDomain.plus(point(20), INT32)); assertEquals(intDomain.without(20), intDomain.without(0).plus(point(20), INT32)); assertEquals(all().without(20), all().without(0).plus(point(20), INT64)); assertEquals(intDomain, range(20, 30).join(range(40, 50)).plus(intDomain, INT32)); assertEquals(intDomain, range(Integer.MIN_VALUE, 2).plus(range(-2, Integer.MAX_VALUE), INT32)); assertEquals(all(), range(Long.MIN_VALUE, 2).plus(range(-2, Long.MAX_VALUE), INT64)); assertEquals(all(), range(-100, Long.MAX_VALUE).plus(all(), INT64)); assertEquals("{-9223372036854775745..Long.MAX_VALUE}: <63> mod 64", all().mul(point(64), INT64).minus(point(1), INT64).toString()); }