#These two lines do the exact same thing. However, the first is preferred as it only creates #a shape in generating the mask, as opposed to an entire Region. Therefore, the serialization #of R after the first call is smaller than the serialization of R after only running the second #line. R("INT", "SQUARE", Location(0, 0), Location(31, 19)) R &= Region("SQUARE", Location(0, 0), Location(31, 19)) l1 = Location(15, 10) assert l1 in R R("XOR", "SQUARE", Location(0, 0), Location(31, 19)) assert l1 not in R R ^= Region("SQUARE", Location(0, 0), Location(31, 19)) assert l1 in R print R assert l1.move(6, 2) not in R for l2 in R: assert l2 in R S = Region(R) assert S == R S("ADD", "LINE", Location(0, 0), Location(31, 19), 3) S("ADD", "LINE", Location(0, 19), Location(31, 0), 3) assert S != R S = Region(R.dehydrate()) assert S == R S("ADD", "CIRCLE", Location(4, 12), 3) assert S != R assert Location(0, 0) in Region("CIRCLE", Location(0, 0), 10)