Optimize lib/interval tests' opKey look-up
diff --git a/lib/interval/interval_test.go b/lib/interval/interval_test.go
index cbf1f77..4fa52a9 100644
--- a/lib/interval/interval_test.go
+++ b/lib/interval/interval_test.go
@@ -22,6 +22,7 @@
 	"strconv"
 	"strings"
 	"testing"
+	"unicode/utf8"
 )
 
 var fromNeg7ToPos7 = []*big.Int{
@@ -328,7 +329,7 @@
 		((x[1] == y[1]) && (x[1] != nil))
 }
 
-func testBruteForceAgrees(x IntRange, y IntRange, opKey string) error {
+func testBruteForceAgrees(x IntRange, y IntRange, opKey rune) error {
 	brute, bruteOK := bruteForce(x, y, opKey)
 	got, gotOK := intOperators[opKey](x, y)
 	if shareBigIntPointers(got, x) || shareBigIntPointers(got, y) {
@@ -351,7 +352,7 @@
 						y := IntRange{y0, y1}
 
 						if err := testBruteForceAgrees(x, y, opKey); err != nil {
-							tt.Fatalf("%v %s %v: %v", x, opKey, y, err)
+							tt.Fatalf("%v %c %v: %v", x, opKey, y, err)
 						}
 					}
 				}
@@ -375,7 +376,7 @@
 			x := IntRange{gen(rng), gen(rng)}
 			y := IntRange{gen(rng), gen(rng)}
 			if err := testBruteForceAgrees(x, y, opKey); err != nil {
-				tt.Fatalf("%v %s %v: %v", x, opKey, y, err)
+				tt.Fatalf("%v %c %v: %v", x, opKey, y, err)
 			}
 		}
 	}
@@ -399,7 +400,8 @@
 	i := 0
 	for ; i < len(s) && s[i] != ' '; i++ {
 	}
-	opKey, s := s[:i], s[i:]
+	opKey, _ := utf8.DecodeRuneInString(s[:i])
+	s = s[i:]
 
 	y, s, err := parseInterval(s)
 	if err != nil {
@@ -437,467 +439,469 @@
 	return nil
 }
 
-var intOperators = map[string]func(IntRange, IntRange) (IntRange, bool){
-	"∪":  func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Unite(y), true },
-	"∩":  func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Intersect(y), true },
-	"+":  func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Add(y), true },
-	"-":  func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Sub(y), true },
-	"*":  func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Mul(y), true },
-	"/":  IntRange.Quo,
-	"<<": IntRange.Lsh,
-	">>": IntRange.Rsh,
-	"&":  IntRange.And,
-	"|":  IntRange.Or,
+var intOperators = map[rune]func(IntRange, IntRange) (IntRange, bool){
+	'∪': func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Unite(y), true },
+	'∩': func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Intersect(y), true },
+	'+': func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Add(y), true },
+	'-': func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Sub(y), true },
+	'*': func(x IntRange, y IntRange) (z IntRange, ok bool) { return x.Mul(y), true },
+	'/': IntRange.Quo,
+	'«': IntRange.Lsh,
+	'»': IntRange.Rsh,
+	'&': IntRange.And,
+	'|': IntRange.Or,
 }
 
-var intOperatorsKeys []string
+var intOperatorsKeys []rune
 
 func init() {
 	for k := range intOperators {
 		intOperatorsKeys = append(intOperatorsKeys, k)
 	}
-	sort.Strings(intOperatorsKeys)
+	sort.Slice(intOperatorsKeys, func(i, j int) bool {
+		return intOperatorsKeys[i] < intOperatorsKeys[j]
+	})
 }
 
 func TestOpUnite(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   ∪  [  -5,   -5]  ==  [  -5,    3]",
-		"[   3,    3]   ∪  [   0,    0]  ==  [   0,    3]",
-		"[   0,    0]   ∪  [  -7,    7]  ==  [  -7,    7]",
-		"[   0,    2]   ∪  [   0,    5]  ==  [   0,    5]",
-		"[   3,    6]   ∪  [  10,   15]  ==  [   3,   15]",
-		"[   3,   +∞)   ∪  [  -4,   -2]  ==  [  -4,   +∞)",
-		"[   3,   +∞)   ∪  [  10,   15]  ==  [   3,   +∞)",
-		"[   3,   +∞)   ∪  (  -∞,   15]  ==  (  -∞,   +∞)",
-		"[   3,    6]   ∪  (  -∞,   15]  ==  (  -∞,   15]",
-		"[   3,    6]   ∪  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   ∪  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   ∪  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   ∪  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]   ∪  [...empty..]  ==  [   3,    6]",
-		"[...empty..]   ∪  [  10,   15]  ==  [  10,   15]",
-		"[...empty..]   ∪  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   ∪  [...empty..]  ==  (  -∞,   +∞)",
+		"[   3,    3]  ∪  [  -5,   -5]  ==  [  -5,    3]",
+		"[   3,    3]  ∪  [   0,    0]  ==  [   0,    3]",
+		"[   0,    0]  ∪  [  -7,    7]  ==  [  -7,    7]",
+		"[   0,    2]  ∪  [   0,    5]  ==  [   0,    5]",
+		"[   3,    6]  ∪  [  10,   15]  ==  [   3,   15]",
+		"[   3,   +∞)  ∪  [  -4,   -2]  ==  [  -4,   +∞)",
+		"[   3,   +∞)  ∪  [  10,   15]  ==  [   3,   +∞)",
+		"[   3,   +∞)  ∪  (  -∞,   15]  ==  (  -∞,   +∞)",
+		"[   3,    6]  ∪  (  -∞,   15]  ==  (  -∞,   15]",
+		"[   3,    6]  ∪  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  ∪  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  ∪  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  ∪  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  ∪  [...empty..]  ==  [   3,    6]",
+		"[...empty..]  ∪  [  10,   15]  ==  [  10,   15]",
+		"[...empty..]  ∪  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  ∪  [...empty..]  ==  (  -∞,   +∞)",
 	)
 }
 
 func TestOpIntersect(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   ∩  [  -5,   -5]  ==  [...empty..]",
-		"[   3,    3]   ∩  [   0,    0]  ==  [...empty..]",
-		"[   0,    0]   ∩  [  -7,    7]  ==  [   0,    0]",
-		"[   0,    2]   ∩  [   0,    5]  ==  [   0,    2]",
-		"[   3,    6]   ∩  [  10,   15]  ==  [...empty..]",
-		"[   3,   +∞)   ∩  [  -4,   -2]  ==  [...empty..]",
-		"[   3,   +∞)   ∩  [  10,   15]  ==  [  10,   15]",
-		"[   3,   +∞)   ∩  (  -∞,   15]  ==  [   3,   15]",
-		"[   3,    6]   ∩  (  -∞,   15]  ==  [   3,    6]",
-		"[   3,    6]   ∩  (  -∞,   +∞)  ==  [   3,    6]",
-		"(  -∞,   +∞)   ∩  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   ∩  [   1,    2]  ==  [   1,    2]",
-		"(  -∞,   +∞)   ∩  [   0,    0]  ==  [   0,    0]",
-		"[   3,    6]   ∩  [...empty..]  ==  [...empty..]",
-		"[...empty..]   ∩  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   ∩  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   ∩  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  ∩  [  -5,   -5]  ==  [...empty..]",
+		"[   3,    3]  ∩  [   0,    0]  ==  [...empty..]",
+		"[   0,    0]  ∩  [  -7,    7]  ==  [   0,    0]",
+		"[   0,    2]  ∩  [   0,    5]  ==  [   0,    2]",
+		"[   3,    6]  ∩  [  10,   15]  ==  [...empty..]",
+		"[   3,   +∞)  ∩  [  -4,   -2]  ==  [...empty..]",
+		"[   3,   +∞)  ∩  [  10,   15]  ==  [  10,   15]",
+		"[   3,   +∞)  ∩  (  -∞,   15]  ==  [   3,   15]",
+		"[   3,    6]  ∩  (  -∞,   15]  ==  [   3,    6]",
+		"[   3,    6]  ∩  (  -∞,   +∞)  ==  [   3,    6]",
+		"(  -∞,   +∞)  ∩  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  ∩  [   1,    2]  ==  [   1,    2]",
+		"(  -∞,   +∞)  ∩  [   0,    0]  ==  [   0,    0]",
+		"[   3,    6]  ∩  [...empty..]  ==  [...empty..]",
+		"[...empty..]  ∩  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  ∩  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  ∩  [...empty..]  ==  [...empty..]",
 	)
 }
 
 func TestOpAdd(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   +  [  -5,   -5]  ==  [  -2,   -2]",
-		"[   3,    3]   +  [   0,    0]  ==  [   3,    3]",
-		"[   0,    0]   +  [  -7,    7]  ==  [  -7,    7]",
-		"[   0,    2]   +  [   0,    5]  ==  [   0,    7]",
-		"[   3,    6]   +  [  10,   15]  ==  [  13,   21]",
-		"[   3,   +∞)   +  [  -4,   -2]  ==  [  -1,   +∞)",
-		"[   3,   +∞)   +  [  10,   15]  ==  [  13,   +∞)",
-		"[   3,   +∞)   +  (  -∞,   15]  ==  (  -∞,   +∞)",
-		"[   3,    6]   +  (  -∞,   15]  ==  (  -∞,   21]",
-		"[   3,    6]   +  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   +  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   +  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   +  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]   +  [...empty..]  ==  [...empty..]",
-		"[...empty..]   +  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   +  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   +  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  +  [  -5,   -5]  ==  [  -2,   -2]",
+		"[   3,    3]  +  [   0,    0]  ==  [   3,    3]",
+		"[   0,    0]  +  [  -7,    7]  ==  [  -7,    7]",
+		"[   0,    2]  +  [   0,    5]  ==  [   0,    7]",
+		"[   3,    6]  +  [  10,   15]  ==  [  13,   21]",
+		"[   3,   +∞)  +  [  -4,   -2]  ==  [  -1,   +∞)",
+		"[   3,   +∞)  +  [  10,   15]  ==  [  13,   +∞)",
+		"[   3,   +∞)  +  (  -∞,   15]  ==  (  -∞,   +∞)",
+		"[   3,    6]  +  (  -∞,   15]  ==  (  -∞,   21]",
+		"[   3,    6]  +  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  +  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  +  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  +  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  +  [...empty..]  ==  [...empty..]",
+		"[...empty..]  +  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  +  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  +  [...empty..]  ==  [...empty..]",
 	)
 }
 
 func TestOpSub(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   -  [  -5,   -5]  ==  [   8,    8]",
-		"[   3,    3]   -  [   0,    0]  ==  [   3,    3]",
-		"[   0,    0]   -  [  -7,    7]  ==  [  -7,    7]",
-		"[   0,    2]   -  [   0,    5]  ==  [  -5,    2]",
-		"[   3,    6]   -  [  10,   15]  ==  [ -12,   -4]",
-		"[   3,   +∞)   -  [  -4,   -2]  ==  [   5,   +∞)",
-		"[   3,   +∞)   -  [  10,   15]  ==  [ -12,   +∞)",
-		"[   3,   +∞)   -  (  -∞,   15]  ==  (  -∞,   +∞)",
-		"[   3,    6]   -  (  -∞,   15]  ==  [ -12,   +∞)",
-		"[   3,    6]   -  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   -  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   -  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   -  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]   -  [...empty..]  ==  [...empty..]",
-		"[...empty..]   -  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   -  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   -  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  -  [  -5,   -5]  ==  [   8,    8]",
+		"[   3,    3]  -  [   0,    0]  ==  [   3,    3]",
+		"[   0,    0]  -  [  -7,    7]  ==  [  -7,    7]",
+		"[   0,    2]  -  [   0,    5]  ==  [  -5,    2]",
+		"[   3,    6]  -  [  10,   15]  ==  [ -12,   -4]",
+		"[   3,   +∞)  -  [  -4,   -2]  ==  [   5,   +∞)",
+		"[   3,   +∞)  -  [  10,   15]  ==  [ -12,   +∞)",
+		"[   3,   +∞)  -  (  -∞,   15]  ==  (  -∞,   +∞)",
+		"[   3,    6]  -  (  -∞,   15]  ==  [ -12,   +∞)",
+		"[   3,    6]  -  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  -  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  -  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  -  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  -  [...empty..]  ==  [...empty..]",
+		"[...empty..]  -  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  -  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  -  [...empty..]  ==  [...empty..]",
 	)
 }
 
 func TestOpMul(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   *  [  -5,   -5]  ==  [ -15,  -15]",
-		"[   3,    3]   *  [   0,    0]  ==  [   0,    0]",
-		"[   0,    0]   *  [  -7,    7]  ==  [   0,    0]",
-		"[   0,    2]   *  [   0,    5]  ==  [   0,   10]",
-		"[   3,    6]   *  [  10,   15]  ==  [  30,   90]",
-		"[   3,   +∞)   *  [  -4,   -2]  ==  (  -∞,   -6]",
-		"[   3,   +∞)   *  [  10,   15]  ==  [  30,   +∞)",
-		"[   3,   +∞)   *  (  -∞,   15]  ==  (  -∞,   +∞)",
-		"[   3,    6]   *  (  -∞,   15]  ==  (  -∞,   90]",
-		"[   3,    6]   *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   *  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   *  [   0,    0]  ==  [   0,    0]",
-		"[   3,    6]   *  [...empty..]  ==  [...empty..]",
-		"[...empty..]   *  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   *  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   *  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  *  [  -5,   -5]  ==  [ -15,  -15]",
+		"[   3,    3]  *  [   0,    0]  ==  [   0,    0]",
+		"[   0,    0]  *  [  -7,    7]  ==  [   0,    0]",
+		"[   0,    2]  *  [   0,    5]  ==  [   0,   10]",
+		"[   3,    6]  *  [  10,   15]  ==  [  30,   90]",
+		"[   3,   +∞)  *  [  -4,   -2]  ==  (  -∞,   -6]",
+		"[   3,   +∞)  *  [  10,   15]  ==  [  30,   +∞)",
+		"[   3,   +∞)  *  (  -∞,   15]  ==  (  -∞,   +∞)",
+		"[   3,    6]  *  (  -∞,   15]  ==  (  -∞,   90]",
+		"[   3,    6]  *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  *  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  *  [   0,    0]  ==  [   0,    0]",
+		"[   3,    6]  *  [...empty..]  ==  [...empty..]",
+		"[...empty..]  *  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  *  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  *  [...empty..]  ==  [...empty..]",
 
-		"[  -3,   -1]   *  [ -11,  -10]  ==  [  10,   33]",
-		"[  -3,    0]   *  [ -11,  -10]  ==  [   0,   33]",
-		"[  -3,    1]   *  [ -11,  -10]  ==  [ -11,   33]",
-		"[  -3,    4]   *  [ -11,  -10]  ==  [ -44,   33]",
-		"[  -1,    4]   *  [ -11,  -10]  ==  [ -44,   11]",
-		"[   0,    4]   *  [ -11,  -10]  ==  [ -44,    0]",
-		"[   1,    4]   *  [ -11,  -10]  ==  [ -44,  -10]",
+		"[  -3,   -1]  *  [ -11,  -10]  ==  [  10,   33]",
+		"[  -3,    0]  *  [ -11,  -10]  ==  [   0,   33]",
+		"[  -3,    1]  *  [ -11,  -10]  ==  [ -11,   33]",
+		"[  -3,    4]  *  [ -11,  -10]  ==  [ -44,   33]",
+		"[  -1,    4]  *  [ -11,  -10]  ==  [ -44,   11]",
+		"[   0,    4]  *  [ -11,  -10]  ==  [ -44,    0]",
+		"[   1,    4]  *  [ -11,  -10]  ==  [ -44,  -10]",
 
-		"[  -3,   -1]   *  [  -6,    2]  ==  [  -6,   18]",
-		"[  -3,    0]   *  [  -6,    2]  ==  [  -6,   18]",
-		"[  -3,    1]   *  [  -6,    2]  ==  [  -6,   18]",
-		"[  -3,    4]   *  [  -6,    2]  ==  [ -24,   18]",
-		"[  -1,    4]   *  [  -6,    2]  ==  [ -24,    8]",
-		"[   0,    4]   *  [  -6,    2]  ==  [ -24,    8]",
-		"[   1,    4]   *  [  -6,    2]  ==  [ -24,    8]",
+		"[  -3,   -1]  *  [  -6,    2]  ==  [  -6,   18]",
+		"[  -3,    0]  *  [  -6,    2]  ==  [  -6,   18]",
+		"[  -3,    1]  *  [  -6,    2]  ==  [  -6,   18]",
+		"[  -3,    4]  *  [  -6,    2]  ==  [ -24,   18]",
+		"[  -1,    4]  *  [  -6,    2]  ==  [ -24,    8]",
+		"[   0,    4]  *  [  -6,    2]  ==  [ -24,    8]",
+		"[   1,    4]  *  [  -6,    2]  ==  [ -24,    8]",
 
-		"[  -3,   -1]   *  [   0,    3]  ==  [  -9,    0]",
-		"[  -3,    0]   *  [   0,    3]  ==  [  -9,    0]",
-		"[  -3,    1]   *  [   0,    3]  ==  [  -9,    3]",
-		"[  -3,    4]   *  [   0,    3]  ==  [  -9,   12]",
-		"[  -1,    4]   *  [   0,    3]  ==  [  -3,   12]",
-		"[   0,    4]   *  [   0,    3]  ==  [   0,   12]",
-		"[   1,    4]   *  [   0,    3]  ==  [   0,   12]",
+		"[  -3,   -1]  *  [   0,    3]  ==  [  -9,    0]",
+		"[  -3,    0]  *  [   0,    3]  ==  [  -9,    0]",
+		"[  -3,    1]  *  [   0,    3]  ==  [  -9,    3]",
+		"[  -3,    4]  *  [   0,    3]  ==  [  -9,   12]",
+		"[  -1,    4]  *  [   0,    3]  ==  [  -3,   12]",
+		"[   0,    4]  *  [   0,    3]  ==  [   0,   12]",
+		"[   1,    4]  *  [   0,    3]  ==  [   0,   12]",
 
-		"[  -3,   -1]   *  [   2,    3]  ==  [  -9,   -2]",
-		"[  -3,    0]   *  [   2,    3]  ==  [  -9,    0]",
-		"[  -3,    1]   *  [   2,    3]  ==  [  -9,    3]",
-		"[  -3,    4]   *  [   2,    3]  ==  [  -9,   12]",
-		"[  -1,    4]   *  [   2,    3]  ==  [  -3,   12]",
-		"[   0,    4]   *  [   2,    3]  ==  [   0,   12]",
-		"[   1,    4]   *  [   2,    3]  ==  [   2,   12]",
+		"[  -3,   -1]  *  [   2,    3]  ==  [  -9,   -2]",
+		"[  -3,    0]  *  [   2,    3]  ==  [  -9,    0]",
+		"[  -3,    1]  *  [   2,    3]  ==  [  -9,    3]",
+		"[  -3,    4]  *  [   2,    3]  ==  [  -9,   12]",
+		"[  -1,    4]  *  [   2,    3]  ==  [  -3,   12]",
+		"[   0,    4]  *  [   2,    3]  ==  [   0,   12]",
+		"[   1,    4]  *  [   2,    3]  ==  [   2,   12]",
 
-		"[  -9,   +∞)   *  [   2,   +∞)  ==  (  -∞,   +∞)",
-		"[  -1,   +∞)   *  [   2,   +∞)  ==  (  -∞,   +∞)",
-		"[   0,   +∞)   *  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   1,   +∞)   *  [   2,   +∞)  ==  [   2,   +∞)",
-		"[   7,   +∞)   *  [   2,   +∞)  ==  [  14,   +∞)",
-		"[  -1,    1]   *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"[   0,    0]   *  (  -∞,   +∞)  ==  [   0,    0]",
-		"[   1,    1]   *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[  -9,   +∞)  *  [   2,   +∞)  ==  (  -∞,   +∞)",
+		"[  -1,   +∞)  *  [   2,   +∞)  ==  (  -∞,   +∞)",
+		"[   0,   +∞)  *  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   1,   +∞)  *  [   2,   +∞)  ==  [   2,   +∞)",
+		"[   7,   +∞)  *  [   2,   +∞)  ==  [  14,   +∞)",
+		"[  -1,    1]  *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[   0,    0]  *  (  -∞,   +∞)  ==  [   0,    0]",
+		"[   1,    1]  *  (  -∞,   +∞)  ==  (  -∞,   +∞)",
 	)
 }
 
 func TestOpQuo(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   /  [  -5,   -5]  ==  [   0,    0]",
-		"[   3,    3]   /  [   0,    0]  ==  invalid",
-		"[   0,    0]   /  [  -7,    7]  ==  invalid",
-		"[   0,    2]   /  [   0,    5]  ==  invalid",
-		"[   3,    6]   /  [  10,   15]  ==  [   0,    0]",
-		"[   3,   +∞)   /  [  -4,   -2]  ==  (  -∞,    0]",
-		"[   3,   +∞)   /  [  10,   15]  ==  [   0,   +∞)",
-		"[   3,   +∞)   /  (  -∞,   15]  ==  invalid",
-		"[   3,    6]   /  (  -∞,   15]  ==  invalid",
-		"[   3,    6]   /  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)   /  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)   /  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   /  [   0,    0]  ==  invalid",
-		"[   3,    6]   /  [...empty..]  ==  [...empty..]",
-		"[...empty..]   /  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   /  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   /  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  /  [  -5,   -5]  ==  [   0,    0]",
+		"[   3,    3]  /  [   0,    0]  ==  invalid",
+		"[   0,    0]  /  [  -7,    7]  ==  invalid",
+		"[   0,    2]  /  [   0,    5]  ==  invalid",
+		"[   3,    6]  /  [  10,   15]  ==  [   0,    0]",
+		"[   3,   +∞)  /  [  -4,   -2]  ==  (  -∞,    0]",
+		"[   3,   +∞)  /  [  10,   15]  ==  [   0,   +∞)",
+		"[   3,   +∞)  /  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  /  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  /  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  /  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  /  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  /  [   0,    0]  ==  invalid",
+		"[   3,    6]  /  [...empty..]  ==  [...empty..]",
+		"[...empty..]  /  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  /  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  /  [...empty..]  ==  [...empty..]",
 
-		"[   1,    4]   /  [ -11,  -10]  ==  [   0,    0]",
+		"[   1,    4]  /  [ -11,  -10]  ==  [   0,    0]",
 
-		"[   1,    4]   /  [  -6,    2]  ==  invalid",
+		"[   1,    4]  /  [  -6,    2]  ==  invalid",
 
-		"[  -3,   -1]   /  [   1,    3]  ==  [  -3,    0]",
-		"[  -3,    0]   /  [   1,    3]  ==  [  -3,    0]",
-		"[  -3,    1]   /  [   1,    3]  ==  [  -3,    1]",
-		"[  -3,    4]   /  [   1,    3]  ==  [  -3,    4]",
-		"[  -1,    4]   /  [   1,    3]  ==  [  -1,    4]",
-		"[   0,    4]   /  [   1,    3]  ==  [   0,    4]",
-		"[   1,    4]   /  [   1,    3]  ==  [   0,    4]",
+		"[  -3,   -1]  /  [   1,    3]  ==  [  -3,    0]",
+		"[  -3,    0]  /  [   1,    3]  ==  [  -3,    0]",
+		"[  -3,    1]  /  [   1,    3]  ==  [  -3,    1]",
+		"[  -3,    4]  /  [   1,    3]  ==  [  -3,    4]",
+		"[  -1,    4]  /  [   1,    3]  ==  [  -1,    4]",
+		"[   0,    4]  /  [   1,    3]  ==  [   0,    4]",
+		"[   1,    4]  /  [   1,    3]  ==  [   0,    4]",
 
-		"[  -3,   -1]   /  [   2,    3]  ==  [  -1,    0]",
-		"[  -3,    0]   /  [   2,    3]  ==  [  -1,    0]",
-		"[  -3,    1]   /  [   2,    3]  ==  [  -1,    0]",
-		"[  -3,    4]   /  [   2,    3]  ==  [  -1,    2]",
-		"[  -1,    4]   /  [   2,    3]  ==  [   0,    2]",
-		"[   0,    4]   /  [   2,    3]  ==  [   0,    2]",
-		"[   1,    4]   /  [   2,    3]  ==  [   0,    2]",
+		"[  -3,   -1]  /  [   2,    3]  ==  [  -1,    0]",
+		"[  -3,    0]  /  [   2,    3]  ==  [  -1,    0]",
+		"[  -3,    1]  /  [   2,    3]  ==  [  -1,    0]",
+		"[  -3,    4]  /  [   2,    3]  ==  [  -1,    2]",
+		"[  -1,    4]  /  [   2,    3]  ==  [   0,    2]",
+		"[   0,    4]  /  [   2,    3]  ==  [   0,    2]",
+		"[   1,    4]  /  [   2,    3]  ==  [   0,    2]",
 
-		"[  -9,   +∞)   /  [   2,   +∞)  ==  [  -4,   +∞)",
-		"[  -1,   +∞)   /  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   0,   +∞)   /  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   1,   +∞)   /  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   7,   +∞)   /  [   2,   +∞)  ==  [   0,   +∞)",
-		"[  -1,    1]   /  (  -∞,   +∞)  ==  invalid",
-		"[   0,    0]   /  (  -∞,   +∞)  ==  invalid",
-		"[   1,    1]   /  (  -∞,   +∞)  ==  invalid",
+		"[  -9,   +∞)  /  [   2,   +∞)  ==  [  -4,   +∞)",
+		"[  -1,   +∞)  /  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   0,   +∞)  /  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   1,   +∞)  /  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   7,   +∞)  /  [   2,   +∞)  ==  [   0,   +∞)",
+		"[  -1,    1]  /  (  -∞,   +∞)  ==  invalid",
+		"[   0,    0]  /  (  -∞,   +∞)  ==  invalid",
+		"[   1,    1]  /  (  -∞,   +∞)  ==  invalid",
 	)
 }
 
 func TestOpLsh(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]  <<  [  -5,   -5]  ==  invalid",
-		"[   3,    3]  <<  [   0,    0]  ==  [   3,    3]",
-		"[   0,    0]  <<  [  -7,    7]  ==  invalid",
-		"[   0,    2]  <<  [   0,    5]  ==  [   0,   64]",
-		"[   3,    6]  <<  [  10,   15]  ==  [3072, 196608]",
-		"[   3,   +∞)  <<  [  -4,   -2]  ==  invalid",
-		"[   3,   +∞)  <<  [  10,   15]  ==  [3072,   +∞)",
-		"[   3,   +∞)  <<  (  -∞,   15]  ==  invalid",
-		"[   3,    6]  <<  (  -∞,   15]  ==  invalid",
-		"[   3,    6]  <<  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)  <<  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)  <<  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)  <<  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]  <<  [...empty..]  ==  [...empty..]",
-		"[...empty..]  <<  [  10,   15]  ==  [...empty..]",
-		"[...empty..]  <<  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)  <<  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  «  [  -5,   -5]  ==  invalid",
+		"[   3,    3]  «  [   0,    0]  ==  [   3,    3]",
+		"[   0,    0]  «  [  -7,    7]  ==  invalid",
+		"[   0,    2]  «  [   0,    5]  ==  [   0,   64]",
+		"[   3,    6]  «  [  10,   15]  ==  [3072, 196608]",
+		"[   3,   +∞)  «  [  -4,   -2]  ==  invalid",
+		"[   3,   +∞)  «  [  10,   15]  ==  [3072,   +∞)",
+		"[   3,   +∞)  «  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  «  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  «  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  «  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  «  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  «  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  «  [...empty..]  ==  [...empty..]",
+		"[...empty..]  «  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  «  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  «  [...empty..]  ==  [...empty..]",
 
-		"[   1,    4]  <<  [ -11,  -10]  ==  invalid",
+		"[   1,    4]  «  [ -11,  -10]  ==  invalid",
 
-		"[   1,    4]  <<  [  -6,    2]  ==  invalid",
+		"[   1,    4]  «  [  -6,    2]  ==  invalid",
 
-		"[  -3,   -1]  <<  [   0,    3]  ==  [ -24,   -1]",
-		"[  -3,    0]  <<  [   0,    3]  ==  [ -24,    0]",
-		"[  -3,    1]  <<  [   0,    3]  ==  [ -24,    8]",
-		"[  -3,    4]  <<  [   0,    3]  ==  [ -24,   32]",
-		"[  -1,    4]  <<  [   0,    3]  ==  [  -8,   32]",
-		"[   0,    4]  <<  [   0,    3]  ==  [   0,   32]",
-		"[   1,    4]  <<  [   0,    3]  ==  [   1,   32]",
+		"[  -3,   -1]  «  [   0,    3]  ==  [ -24,   -1]",
+		"[  -3,    0]  «  [   0,    3]  ==  [ -24,    0]",
+		"[  -3,    1]  «  [   0,    3]  ==  [ -24,    8]",
+		"[  -3,    4]  «  [   0,    3]  ==  [ -24,   32]",
+		"[  -1,    4]  «  [   0,    3]  ==  [  -8,   32]",
+		"[   0,    4]  «  [   0,    3]  ==  [   0,   32]",
+		"[   1,    4]  «  [   0,    3]  ==  [   1,   32]",
 
-		"[  -3,   -1]  <<  [   2,    3]  ==  [ -24,   -4]",
-		"[  -3,    0]  <<  [   2,    3]  ==  [ -24,    0]",
-		"[  -3,    1]  <<  [   2,    3]  ==  [ -24,    8]",
-		"[  -3,    4]  <<  [   2,    3]  ==  [ -24,   32]",
-		"[  -1,    4]  <<  [   2,    3]  ==  [  -8,   32]",
-		"[   0,    4]  <<  [   2,    3]  ==  [   0,   32]",
-		"[   1,    4]  <<  [   2,    3]  ==  [   4,   32]",
+		"[  -3,   -1]  «  [   2,    3]  ==  [ -24,   -4]",
+		"[  -3,    0]  «  [   2,    3]  ==  [ -24,    0]",
+		"[  -3,    1]  «  [   2,    3]  ==  [ -24,    8]",
+		"[  -3,    4]  «  [   2,    3]  ==  [ -24,   32]",
+		"[  -1,    4]  «  [   2,    3]  ==  [  -8,   32]",
+		"[   0,    4]  «  [   2,    3]  ==  [   0,   32]",
+		"[   1,    4]  «  [   2,    3]  ==  [   4,   32]",
 
-		"[  -9,   +∞)  <<  [   2,   +∞)  ==  (  -∞,   +∞)",
-		"[  -1,   +∞)  <<  [   2,   +∞)  ==  (  -∞,   +∞)",
-		"[   0,   +∞)  <<  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   1,   +∞)  <<  [   2,   +∞)  ==  [   4,   +∞)",
-		"[   7,   +∞)  <<  [   2,   +∞)  ==  [  28,   +∞)",
-		"[  -1,    1]  <<  (  -∞,   +∞)  ==  invalid",
-		"[   0,    0]  <<  (  -∞,   +∞)  ==  invalid",
-		"[   1,    1]  <<  (  -∞,   +∞)  ==  invalid",
+		"[  -9,   +∞)  «  [   2,   +∞)  ==  (  -∞,   +∞)",
+		"[  -1,   +∞)  «  [   2,   +∞)  ==  (  -∞,   +∞)",
+		"[   0,   +∞)  «  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   1,   +∞)  «  [   2,   +∞)  ==  [   4,   +∞)",
+		"[   7,   +∞)  «  [   2,   +∞)  ==  [  28,   +∞)",
+		"[  -1,    1]  «  (  -∞,   +∞)  ==  invalid",
+		"[   0,    0]  «  (  -∞,   +∞)  ==  invalid",
+		"[   1,    1]  «  (  -∞,   +∞)  ==  invalid",
 	)
 }
 
 func TestOpRsh(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]  >>  [  -5,   -5]  ==  invalid",
-		"[   3,    3]  >>  [   0,    0]  ==  [   3,    3]",
-		"[   0,    0]  >>  [  -7,    7]  ==  invalid",
-		"[   0,    2]  >>  [   0,    5]  ==  [   0,    2]",
-		"[   3,    6]  >>  [  10,   15]  ==  [   0,    0]",
-		"[   3,   +∞)  >>  [  -4,   -2]  ==  invalid",
-		"[   3,   +∞)  >>  [  10,   15]  ==  [   0,   +∞)",
-		"[   3,   +∞)  >>  (  -∞,   15]  ==  invalid",
-		"[   3,    6]  >>  (  -∞,   15]  ==  invalid",
-		"[   3,    6]  >>  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)  >>  (  -∞,   +∞)  ==  invalid",
-		"(  -∞,   +∞)  >>  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)  >>  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]  >>  [...empty..]  ==  [...empty..]",
-		"[...empty..]  >>  [  10,   15]  ==  [...empty..]",
-		"[...empty..]  >>  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)  >>  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  »  [  -5,   -5]  ==  invalid",
+		"[   3,    3]  »  [   0,    0]  ==  [   3,    3]",
+		"[   0,    0]  »  [  -7,    7]  ==  invalid",
+		"[   0,    2]  »  [   0,    5]  ==  [   0,    2]",
+		"[   3,    6]  »  [  10,   15]  ==  [   0,    0]",
+		"[   3,   +∞)  »  [  -4,   -2]  ==  invalid",
+		"[   3,   +∞)  »  [  10,   15]  ==  [   0,   +∞)",
+		"[   3,   +∞)  »  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  »  (  -∞,   15]  ==  invalid",
+		"[   3,    6]  »  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  »  (  -∞,   +∞)  ==  invalid",
+		"(  -∞,   +∞)  »  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  »  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  »  [...empty..]  ==  [...empty..]",
+		"[...empty..]  »  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  »  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  »  [...empty..]  ==  [...empty..]",
 
-		"[   1,    4]  >>  [ -11,  -10]  ==  invalid",
+		"[   1,    4]  »  [ -11,  -10]  ==  invalid",
 
-		"[   1,    4]  >>  [  -6,    2]  ==  invalid",
+		"[   1,    4]  »  [  -6,    2]  ==  invalid",
 
-		"[  -3,   -1]  >>  [   0,    3]  ==  [  -3,   -1]",
-		"[  -3,    0]  >>  [   0,    3]  ==  [  -3,    0]",
-		"[  -3,    1]  >>  [   0,    3]  ==  [  -3,    1]",
-		"[  -3,    4]  >>  [   0,    3]  ==  [  -3,    4]",
-		"[  -1,    4]  >>  [   0,    3]  ==  [  -1,    4]",
-		"[   0,    4]  >>  [   0,    3]  ==  [   0,    4]",
-		"[   1,    4]  >>  [   0,    3]  ==  [   0,    4]",
+		"[  -3,   -1]  »  [   0,    3]  ==  [  -3,   -1]",
+		"[  -3,    0]  »  [   0,    3]  ==  [  -3,    0]",
+		"[  -3,    1]  »  [   0,    3]  ==  [  -3,    1]",
+		"[  -3,    4]  »  [   0,    3]  ==  [  -3,    4]",
+		"[  -1,    4]  »  [   0,    3]  ==  [  -1,    4]",
+		"[   0,    4]  »  [   0,    3]  ==  [   0,    4]",
+		"[   1,    4]  »  [   0,    3]  ==  [   0,    4]",
 
-		"[  -3,   -1]  >>  [   1,    3]  ==  [  -2,   -1]",
-		"[  -3,    0]  >>  [   1,    3]  ==  [  -2,    0]",
-		"[  -3,    1]  >>  [   1,    3]  ==  [  -2,    0]",
-		"[  -3,    4]  >>  [   1,    3]  ==  [  -2,    2]",
-		"[  -1,    4]  >>  [   1,    3]  ==  [  -1,    2]",
-		"[   0,    4]  >>  [   1,    3]  ==  [   0,    2]",
-		"[   1,    4]  >>  [   1,    3]  ==  [   0,    2]",
+		"[  -3,   -1]  »  [   1,    3]  ==  [  -2,   -1]",
+		"[  -3,    0]  »  [   1,    3]  ==  [  -2,    0]",
+		"[  -3,    1]  »  [   1,    3]  ==  [  -2,    0]",
+		"[  -3,    4]  »  [   1,    3]  ==  [  -2,    2]",
+		"[  -1,    4]  »  [   1,    3]  ==  [  -1,    2]",
+		"[   0,    4]  »  [   1,    3]  ==  [   0,    2]",
+		"[   1,    4]  »  [   1,    3]  ==  [   0,    2]",
 
-		"[  -9,   +∞)  >>  [   2,   +∞)  ==  [  -3,   +∞)",
-		"[  -1,   +∞)  >>  [   2,   +∞)  ==  [  -1,   +∞)",
-		"[   0,   +∞)  >>  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   1,   +∞)  >>  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   7,   +∞)  >>  [   2,   +∞)  ==  [   0,   +∞)",
-		"[  -1,    1]  >>  (  -∞,   +∞)  ==  invalid",
-		"[   0,    0]  >>  (  -∞,   +∞)  ==  invalid",
-		"[   1,    1]  >>  (  -∞,   +∞)  ==  invalid",
+		"[  -9,   +∞)  »  [   2,   +∞)  ==  [  -3,   +∞)",
+		"[  -1,   +∞)  »  [   2,   +∞)  ==  [  -1,   +∞)",
+		"[   0,   +∞)  »  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   1,   +∞)  »  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   7,   +∞)  »  [   2,   +∞)  ==  [   0,   +∞)",
+		"[  -1,    1]  »  (  -∞,   +∞)  ==  invalid",
+		"[   0,    0]  »  (  -∞,   +∞)  ==  invalid",
+		"[   1,    1]  »  (  -∞,   +∞)  ==  invalid",
 	)
 }
 
 func TestOpAnd(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   &  [  -5,   -5]  ==  [   3,    3]",
-		"[   3,    3]   &  [   0,    0]  ==  [   0,    0]",
-		"[   0,    0]   &  [  -7,    7]  ==  [   0,    0]",
-		"[   0,    2]   &  [   0,    5]  ==  [   0,    2]",
-		"[   3,    6]   &  [  10,   15]  ==  [   0,    6]",
-		"[   3,   +∞)   &  [  -4,   -2]  ==  [   0,   +∞)",
-		"[   3,   +∞)   &  [  10,   15]  ==  [   0,   15]",
-		"[   3,   +∞)   &  (  -∞,   15]  ==  [   0,   +∞)",
-		"[   3,    6]   &  (  -∞,   15]  ==  [   0,    6]",
-		"[   3,    6]   &  (  -∞,   +∞)  ==  [   0,    6]",
-		"(  -∞,   +∞)   &  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   &  [   1,    2]  ==  [   0,    2]",
-		"(  -∞,   +∞)   &  [   0,    0]  ==  [   0,    0]",
-		"[   3,    6]   &  [...empty..]  ==  [...empty..]",
-		"[...empty..]   &  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   &  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   &  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  &  [  -5,   -5]  ==  [   3,    3]",
+		"[   3,    3]  &  [   0,    0]  ==  [   0,    0]",
+		"[   0,    0]  &  [  -7,    7]  ==  [   0,    0]",
+		"[   0,    2]  &  [   0,    5]  ==  [   0,    2]",
+		"[   3,    6]  &  [  10,   15]  ==  [   0,    6]",
+		"[   3,   +∞)  &  [  -4,   -2]  ==  [   0,   +∞)",
+		"[   3,   +∞)  &  [  10,   15]  ==  [   0,   15]",
+		"[   3,   +∞)  &  (  -∞,   15]  ==  [   0,   +∞)",
+		"[   3,    6]  &  (  -∞,   15]  ==  [   0,    6]",
+		"[   3,    6]  &  (  -∞,   +∞)  ==  [   0,    6]",
+		"(  -∞,   +∞)  &  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  &  [   1,    2]  ==  [   0,    2]",
+		"(  -∞,   +∞)  &  [   0,    0]  ==  [   0,    0]",
+		"[   3,    6]  &  [...empty..]  ==  [...empty..]",
+		"[...empty..]  &  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  &  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  &  [...empty..]  ==  [...empty..]",
 
-		"[   1,    4]   &  [ -11,  -10]  ==  [   0,    4]",
+		"[   1,    4]  &  [ -11,  -10]  ==  [   0,    4]",
 
-		"[   1,    4]   &  [  -6,    2]  ==  [   0,    4]",
+		"[   1,    4]  &  [  -6,    2]  ==  [   0,    4]",
 
-		"[  -3,   -1]   &  [   0,    3]  ==  [   0,    3]",
-		"[  -1,    4]   &  [   0,    3]  ==  [   0,    3]",
-		"[   0,    4]   &  [   0,    3]  ==  [   0,    3]",
-		"[   1,    4]   &  [   0,    3]  ==  [   0,    3]",
+		"[  -3,   -1]  &  [   0,    3]  ==  [   0,    3]",
+		"[  -1,    4]  &  [   0,    3]  ==  [   0,    3]",
+		"[   0,    4]  &  [   0,    3]  ==  [   0,    3]",
+		"[   1,    4]  &  [   0,    3]  ==  [   0,    3]",
 
-		"[  -3,   -1]   &  [   2,    3]  ==  [   0,    3]",
-		"[  -1,    4]   &  [   2,    3]  ==  [   0,    3]",
-		"[   0,    4]   &  [   2,    3]  ==  [   0,    3]",
-		"[   1,    4]   &  [   2,    3]  ==  [   0,    3]",
+		"[  -3,   -1]  &  [   2,    3]  ==  [   0,    3]",
+		"[  -1,    4]  &  [   2,    3]  ==  [   0,    3]",
+		"[   0,    4]  &  [   2,    3]  ==  [   0,    3]",
+		"[   1,    4]  &  [   2,    3]  ==  [   0,    3]",
 
-		"[  -9,   +∞)   &  [   2,   +∞)  ==  [   0,   +∞)",
-		"[  -1,   +∞)   &  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   0,   +∞)   &  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   1,   +∞)   &  [   2,   +∞)  ==  [   0,   +∞)",
-		"[   7,   +∞)   &  [   2,   +∞)  ==  [   0,   +∞)",
-		"[  -1,    1]   &  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"[   0,    0]   &  (  -∞,   +∞)  ==  [   0,    0]",
-		"[   1,    1]   &  (  -∞,   +∞)  ==  [   0,    1]",
+		"[  -9,   +∞)  &  [   2,   +∞)  ==  [   0,   +∞)",
+		"[  -1,   +∞)  &  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   0,   +∞)  &  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   1,   +∞)  &  [   2,   +∞)  ==  [   0,   +∞)",
+		"[   7,   +∞)  &  [   2,   +∞)  ==  [   0,   +∞)",
+		"[  -1,    1]  &  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[   0,    0]  &  (  -∞,   +∞)  ==  [   0,    0]",
+		"[   1,    1]  &  (  -∞,   +∞)  ==  [   0,    1]",
 
-		"[   1,    3]   &  [   4,    9]  ==  [   0,    3]",
-		"[   3,    4]   &  [   5,    6]  ==  [   1,    4]",
-		"[   4,    5]   &  [   6,    7]  ==  [   4,    5]",
-		"[   7,    7]   &  [  12,   14]  ==  [   4,    6]",
+		"[   1,    3]  &  [   4,    9]  ==  [   0,    3]",
+		"[   3,    4]  &  [   5,    6]  ==  [   1,    4]",
+		"[   4,    5]  &  [   6,    7]  ==  [   4,    5]",
+		"[   7,    7]  &  [  12,   14]  ==  [   4,    6]",
 
-		"[   5,    6]   &  [   6,    7]  ==  [   4,    6]",
-		"[   5,    6]   &  [   6,    8]  ==  [   0,    6]",
-		"[   5,    9]   &  [   6,    8]  ==  [   0,    8]",
-		"[   5,    9]   &  [   6,    9]  ==  [   0,    9]",
+		"[   5,    6]  &  [   6,    7]  ==  [   4,    6]",
+		"[   5,    6]  &  [   6,    8]  ==  [   0,    6]",
+		"[   5,    9]  &  [   6,    8]  ==  [   0,    8]",
+		"[   5,    9]  &  [   6,    9]  ==  [   0,    9]",
 
-		"[   5,    6]   &  [   3,   +∞)  ==  [   0,    6]",
-		"[   5,    9]   &  [   3,   +∞)  ==  [   0,    9]",
-		"[   5,    6]   &  [   7,   +∞)  ==  [   0,    6]",
-		"[   5,    9]   &  [   7,   +∞)  ==  [   0,    9]",
-		"[   5,    6]   &  [   8,   +∞)  ==  [   0,    6]",
-		"[   5,    9]   &  [   8,   +∞)  ==  [   0,    9]",
-		"[   5,    6]   &  [   9,   +∞)  ==  [   0,    6]",
-		"[   5,    9]   &  [   9,   +∞)  ==  [   0,    9]",
-		"[   5,    6]   &  [  12,   +∞)  ==  [   0,    6]",
-		"[   5,    9]   &  [  12,   +∞)  ==  [   0,    9]",
+		"[   5,    6]  &  [   3,   +∞)  ==  [   0,    6]",
+		"[   5,    9]  &  [   3,   +∞)  ==  [   0,    9]",
+		"[   5,    6]  &  [   7,   +∞)  ==  [   0,    6]",
+		"[   5,    9]  &  [   7,   +∞)  ==  [   0,    9]",
+		"[   5,    6]  &  [   8,   +∞)  ==  [   0,    6]",
+		"[   5,    9]  &  [   8,   +∞)  ==  [   0,    9]",
+		"[   5,    6]  &  [   9,   +∞)  ==  [   0,    6]",
+		"[   5,    9]  &  [   9,   +∞)  ==  [   0,    9]",
+		"[   5,    6]  &  [  12,   +∞)  ==  [   0,    6]",
+		"[   5,    9]  &  [  12,   +∞)  ==  [   0,    9]",
 
-		"(  -∞,   -3]   &  [  -3,   -2]  ==  (  -∞,   -3]",
-		"[   2,   +∞)   &  [   1,    2]  ==  [   0,    2]",
+		"(  -∞,   -3]  &  [  -3,   -2]  ==  (  -∞,   -3]",
+		"[   2,   +∞)  &  [   1,    2]  ==  [   0,    2]",
 	)
 }
 
 func TestOpOr(tt *testing.T) {
 	testOp(tt,
-		"[   3,    3]   |  [  -5,   -5]  ==  [  -5,   -5]",
-		"[   3,    3]   |  [   0,    0]  ==  [   3,    3]",
-		"[   0,    0]   |  [  -7,    7]  ==  [  -7,    7]",
-		"[   0,    2]   |  [   0,    5]  ==  [   0,    7]",
-		"[   3,    6]   |  [  10,   15]  ==  [  11,   15]",
-		"[   3,   +∞)   |  [  -4,   -2]  ==  [  -4,   -1]",
-		"[   3,   +∞)   |  [  10,   15]  ==  [  10,   +∞)",
-		"[   3,   +∞)   |  (  -∞,   15]  ==  (  -∞,   +∞)",
-		"[   3,    6]   |  (  -∞,   15]  ==  (  -∞,   15]",
-		"[   3,    6]   |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   |  [   1,    2]  ==  (  -∞,   +∞)",
-		"(  -∞,   +∞)   |  [   0,    0]  ==  (  -∞,   +∞)",
-		"[   3,    6]   |  [...empty..]  ==  [...empty..]",
-		"[...empty..]   |  [  10,   15]  ==  [...empty..]",
-		"[...empty..]   |  [...empty..]  ==  [...empty..]",
-		"(  -∞,   +∞)   |  [...empty..]  ==  [...empty..]",
+		"[   3,    3]  |  [  -5,   -5]  ==  [  -5,   -5]",
+		"[   3,    3]  |  [   0,    0]  ==  [   3,    3]",
+		"[   0,    0]  |  [  -7,    7]  ==  [  -7,    7]",
+		"[   0,    2]  |  [   0,    5]  ==  [   0,    7]",
+		"[   3,    6]  |  [  10,   15]  ==  [  11,   15]",
+		"[   3,   +∞)  |  [  -4,   -2]  ==  [  -4,   -1]",
+		"[   3,   +∞)  |  [  10,   15]  ==  [  10,   +∞)",
+		"[   3,   +∞)  |  (  -∞,   15]  ==  (  -∞,   +∞)",
+		"[   3,    6]  |  (  -∞,   15]  ==  (  -∞,   15]",
+		"[   3,    6]  |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  |  [   1,    2]  ==  (  -∞,   +∞)",
+		"(  -∞,   +∞)  |  [   0,    0]  ==  (  -∞,   +∞)",
+		"[   3,    6]  |  [...empty..]  ==  [...empty..]",
+		"[...empty..]  |  [  10,   15]  ==  [...empty..]",
+		"[...empty..]  |  [...empty..]  ==  [...empty..]",
+		"(  -∞,   +∞)  |  [...empty..]  ==  [...empty..]",
 
-		"[   1,    4]   |  [ -11,  -10]  ==  [ -11,   -9]",
+		"[   1,    4]  |  [ -11,  -10]  ==  [ -11,   -9]",
 
-		"[   1,    4]   |  [  -6,    2]  ==  [  -6,    6]",
+		"[   1,    4]  |  [  -6,    2]  ==  [  -6,    6]",
 
-		"[  -3,   -1]   |  [   0,    3]  ==  [  -3,   -1]",
-		"[  -1,    4]   |  [   0,    3]  ==  [  -1,    7]",
-		"[   0,    4]   |  [   0,    3]  ==  [   0,    7]",
-		"[   1,    4]   |  [   0,    3]  ==  [   1,    7]",
+		"[  -3,   -1]  |  [   0,    3]  ==  [  -3,   -1]",
+		"[  -1,    4]  |  [   0,    3]  ==  [  -1,    7]",
+		"[   0,    4]  |  [   0,    3]  ==  [   0,    7]",
+		"[   1,    4]  |  [   0,    3]  ==  [   1,    7]",
 
-		"[  -3,   -1]   |  [   2,    3]  ==  [  -2,   -1]",
-		"[  -1,    4]   |  [   2,    3]  ==  [  -1,    7]",
-		"[   0,    4]   |  [   2,    3]  ==  [   2,    7]",
-		"[   1,    4]   |  [   2,    3]  ==  [   2,    7]",
+		"[  -3,   -1]  |  [   2,    3]  ==  [  -2,   -1]",
+		"[  -1,    4]  |  [   2,    3]  ==  [  -1,    7]",
+		"[   0,    4]  |  [   2,    3]  ==  [   2,    7]",
+		"[   1,    4]  |  [   2,    3]  ==  [   2,    7]",
 
-		"[  -9,   +∞)   |  [   2,   +∞)  ==  [  -9,   +∞)",
-		"[  -1,   +∞)   |  [   2,   +∞)  ==  [  -1,   +∞)",
-		"[   0,   +∞)   |  [   2,   +∞)  ==  [   2,   +∞)",
-		"[   1,   +∞)   |  [   2,   +∞)  ==  [   2,   +∞)",
-		"[   7,   +∞)   |  [   2,   +∞)  ==  [   7,   +∞)",
-		"[  -1,    1]   |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"[   0,    0]   |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
-		"[   1,    1]   |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[  -9,   +∞)  |  [   2,   +∞)  ==  [  -9,   +∞)",
+		"[  -1,   +∞)  |  [   2,   +∞)  ==  [  -1,   +∞)",
+		"[   0,   +∞)  |  [   2,   +∞)  ==  [   2,   +∞)",
+		"[   1,   +∞)  |  [   2,   +∞)  ==  [   2,   +∞)",
+		"[   7,   +∞)  |  [   2,   +∞)  ==  [   7,   +∞)",
+		"[  -1,    1]  |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[   0,    0]  |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
+		"[   1,    1]  |  (  -∞,   +∞)  ==  (  -∞,   +∞)",
 
-		"[   1,    3]   |  [   4,    9]  ==  [   5,   11]",
-		"[   3,    4]   |  [   5,    6]  ==  [   5,    7]",
-		"[   4,    5]   |  [   6,    7]  ==  [   6,    7]",
-		"[   7,    7]   |  [  12,   14]  ==  [  15,   15]",
+		"[   1,    3]  |  [   4,    9]  ==  [   5,   11]",
+		"[   3,    4]  |  [   5,    6]  ==  [   5,    7]",
+		"[   4,    5]  |  [   6,    7]  ==  [   6,    7]",
+		"[   7,    7]  |  [  12,   14]  ==  [  15,   15]",
 
-		"[   5,    6]   |  [   6,    7]  ==  [   6,    7]",
-		"[   5,    6]   |  [   6,    8]  ==  [   6,   14]",
-		"[   5,    9]   |  [   6,    8]  ==  [   6,   15]",
-		"[   5,    9]   |  [   6,    9]  ==  [   6,   15]",
+		"[   5,    6]  |  [   6,    7]  ==  [   6,    7]",
+		"[   5,    6]  |  [   6,    8]  ==  [   6,   14]",
+		"[   5,    9]  |  [   6,    8]  ==  [   6,   15]",
+		"[   5,    9]  |  [   6,    9]  ==  [   6,   15]",
 
-		"[   5,    6]   |  [   3,   +∞)  ==  [   5,   +∞)",
-		"[   5,    9]   |  [   3,   +∞)  ==  [   5,   +∞)",
-		"[   5,    6]   |  [   7,   +∞)  ==  [   7,   +∞)",
-		"[   5,    9]   |  [   7,   +∞)  ==  [   7,   +∞)",
-		"[   5,    6]   |  [   8,   +∞)  ==  [  13,   +∞)",
-		"[   5,    9]   |  [   8,   +∞)  ==  [   8,   +∞)",
-		"[   5,    6]   |  [   9,   +∞)  ==  [  13,   +∞)",
-		"[   5,    9]   |  [   9,   +∞)  ==  [   9,   +∞)",
-		"[   5,    6]   |  [  12,   +∞)  ==  [  13,   +∞)",
-		"[   5,    9]   |  [  12,   +∞)  ==  [  12,   +∞)",
+		"[   5,    6]  |  [   3,   +∞)  ==  [   5,   +∞)",
+		"[   5,    9]  |  [   3,   +∞)  ==  [   5,   +∞)",
+		"[   5,    6]  |  [   7,   +∞)  ==  [   7,   +∞)",
+		"[   5,    9]  |  [   7,   +∞)  ==  [   7,   +∞)",
+		"[   5,    6]  |  [   8,   +∞)  ==  [  13,   +∞)",
+		"[   5,    9]  |  [   8,   +∞)  ==  [   8,   +∞)",
+		"[   5,    6]  |  [   9,   +∞)  ==  [  13,   +∞)",
+		"[   5,    9]  |  [   9,   +∞)  ==  [   9,   +∞)",
+		"[   5,    6]  |  [  12,   +∞)  ==  [  13,   +∞)",
+		"[   5,    9]  |  [  12,   +∞)  ==  [  12,   +∞)",
 
-		"(  -∞,   -3]   |  [  -3,   -2]  ==  [  -3,   -1]",
-		"[   2,   +∞)   |  [   1,    2]  ==  [   2,   +∞)",
+		"(  -∞,   -3]  |  [  -3,   -2]  ==  [  -3,   -1]",
+		"[   2,   +∞)  |  [   1,    2]  ==  [   2,   +∞)",
 	)
 }
 
diff --git a/lib/interval/radial_test.go b/lib/interval/radial_test.go
index e69acfb..4cd1a94 100644
--- a/lib/interval/radial_test.go
+++ b/lib/interval/radial_test.go
@@ -440,18 +440,18 @@
 	return radialOutPair{ox | oy, ox | oy}
 }
 
-var riOperators = map[string]func(radialInput, radialInput) radialOutPair{
-	"+":  radialInput.Add,
-	"-":  radialInput.Sub,
-	"*":  radialInput.Mul,
-	"/":  radialInput.Quo,
-	"<<": radialInput.Lsh,
-	">>": radialInput.Rsh,
-	"&":  radialInput.And,
-	"|":  radialInput.Or,
+var riOperators = map[rune]func(radialInput, radialInput) radialOutPair{
+	'+': radialInput.Add,
+	'-': radialInput.Sub,
+	'*': radialInput.Mul,
+	'/': radialInput.Quo,
+	'«': radialInput.Lsh,
+	'»': radialInput.Rsh,
+	'&': radialInput.And,
+	'|': radialInput.Or,
 }
 
-func bruteForce(x IntRange, y IntRange, opKey string) (z IntRange, ok bool) {
+func bruteForce(x IntRange, y IntRange, opKey rune) (z IntRange, ok bool) {
 	op := riOperators[opKey]
 	iMin, iMax := enumerate(x)
 	jMin, jMax := enumerate(y)
@@ -472,7 +472,7 @@
 	}
 
 	switch opKey {
-	case "∪":
+	case '∪':
 		if iMinC, iMaxC := iMin.canonicalize(), iMax.canonicalize(); iMinC <= iMaxC {
 			merge(radialOutPair{iMinC, iMaxC})
 		}
@@ -486,7 +486,7 @@
 			result[1] = +roRadius + 1
 		}
 
-	case "∩":
+	case '∩':
 		iMinC, iMaxC := iMin.canonicalize(), iMax.canonicalize()
 		for j := jMin; j <= jMax; j++ {
 			jC := j.canonicalize()