======== #1 declaration ========

gmp.mpz(0) .. 0L
gmp.mpq(0) .. 0Lr
gmp.mpf(0) .. 0.L
0L .. 0L
0Lr .. 0Lr
0.L .. 0.L
gmp.mpz(1) .. 1L
gmp.mpq(1) .. 1Lr
gmp.mpf(1) .. 1.L
1L .. 1L
1Lr .. 1Lr
1.L .. 1.L
gmp.mpz(-1) .. -1L
gmp.mpq(-1) .. -1Lr
gmp.mpf(-1) .. -1.L
-1L .. -1L
-1Lr .. -1Lr
-1.L .. -1.L
gmp.mpz(314) .. 314L
gmp.mpq(314) .. 314Lr
gmp.mpf(314) .. 314.L
314L .. 314L
314Lr .. 314Lr
314.L .. 314.L
gmp.mpz('314') .. 314L
gmp.mpq('314') .. 314Lr
gmp.mpf('314') .. 314.L
'314'.cast@mpz() .. 314L
'314'.cast@mpq() .. 314Lr
'314'.cast@mpf() .. 314.L
3.14L .. 3.14L
123456789012345678901234567890123456789012345678901234567890L .. 123456789012345678901234567890123456789012345678901234567890L
123456789012345678901234567890123456789012345678901234567890Lr .. 123456789012345678901234567890123456789012345678901234567890Lr
0777777 .. 262143
0b10101010 .. 170
0xffffffff .. 4294967295

======== #2 generic test for unary operators ========

gmp.mpz
+3L .. 3L
-3L .. -3L
~3L .. -4L
!3L .. false
gmp.mpq
+3Lr .. 3Lr
-3Lr .. -3Lr
~3Lr .. TypeError: can't evaluate (~ gmp.mpq)
!3Lr .. false
gmp.mpf
+3.L .. 3.L
-3.L .. -3.L
~3.L .. TypeError: can't evaluate (~ gmp.mpf)
!3.L .. false

======== #3 generic test for binary operators ========

gmp.mpz, gmp.mpz
3L + 4L .. 7L
3L - 4L .. -1L
3L * 4L .. 12L
3L / 4L .. 0.75L
3L % 4L .. 3L
3L ** 4L .. TypeError: can't evaluate (gmp.mpz ** gmp.mpz)
3L == 4L .. false
3L < 4L .. true
3L > 4L .. false
3L <= 4L .. true
3L >= 4L .. false
3L <=> 4L .. -1
3L in 4L .. false
3L & 4L .. 0L
3L | 4L .. 7L
3L ^ 4L .. 7L
3L << 4L .. TypeError: can't evaluate (gmp.mpz << gmp.mpz)
3L >> 4L .. TypeError: can't evaluate (gmp.mpz >> gmp.mpz)
3L || 4L .. 3L
3L && 4L .. 4L
3L => 4L .. TypeError: can't evaluate (gmp.mpz => gmp.mpz)
gmp.mpz, gmp.mpq
3L + 4Lr .. 7Lr
3L - 4Lr .. -1Lr
3L * 4Lr .. 12Lr
3L / 4Lr .. 3/4Lr
3L % 4Lr .. TypeError: can't evaluate (gmp.mpz % gmp.mpq)
3L ** 4Lr .. TypeError: can't evaluate (gmp.mpz ** gmp.mpq)
3L == 4Lr .. false
3L < 4Lr .. true
3L > 4Lr .. false
3L <= 4Lr .. true
3L >= 4Lr .. false
3L <=> 4Lr .. -1
3L in 4Lr .. false
3L & 4Lr .. TypeError: can't evaluate (gmp.mpz & gmp.mpq)
3L | 4Lr .. TypeError: can't evaluate (gmp.mpz | gmp.mpq)
3L ^ 4Lr .. TypeError: can't evaluate (gmp.mpz ^ gmp.mpq)
3L << 4Lr .. TypeError: can't evaluate (gmp.mpz << gmp.mpq)
3L >> 4Lr .. TypeError: can't evaluate (gmp.mpz >> gmp.mpq)
3L || 4Lr .. 3L
3L && 4Lr .. 4Lr
3L => 4Lr .. TypeError: can't evaluate (gmp.mpz => gmp.mpq)
gmp.mpz, gmp.mpf
3L + 4.L .. 7.L
3L - 4.L .. -1.L
3L * 4.L .. 12.L
3L / 4.L .. 0.75L
3L % 4.L .. TypeError: can't evaluate (gmp.mpz % gmp.mpf)
3L ** 4.L .. TypeError: can't evaluate (gmp.mpz ** gmp.mpf)
3L == 4.L .. false
3L < 4.L .. true
3L > 4.L .. false
3L <= 4.L .. true
3L >= 4.L .. false
3L <=> 4.L .. -1
3L in 4.L .. false
3L & 4.L .. TypeError: can't evaluate (gmp.mpz & gmp.mpf)
3L | 4.L .. TypeError: can't evaluate (gmp.mpz | gmp.mpf)
3L ^ 4.L .. TypeError: can't evaluate (gmp.mpz ^ gmp.mpf)
3L << 4.L .. TypeError: can't evaluate (gmp.mpz << gmp.mpf)
3L >> 4.L .. TypeError: can't evaluate (gmp.mpz >> gmp.mpf)
3L || 4.L .. 3L
3L && 4.L .. 4.L
3L => 4.L .. TypeError: can't evaluate (gmp.mpz => gmp.mpf)
gmp.mpz, number
3L + 4 .. 7L
3L - 4 .. -1L
3L * 4 .. 12L
3L / 4 .. 0.75L
3L % 4 .. 3L
3L ** 4 .. TypeError: can't evaluate (gmp.mpz ** number)
3L == 4 .. false
3L < 4 .. true
3L > 4 .. false
3L <= 4 .. true
3L >= 4 .. false
3L <=> 4 .. -1
3L in 4 .. false
3L & 4 .. 0L
3L | 4 .. 7L
3L ^ 4 .. 7L
3L << 4 .. 48L
3L >> 4 .. 0L
3L || 4 .. 3L
3L && 4 .. 4
3L => 4 .. TypeError: can't evaluate (gmp.mpz => number)
gmp.mpz, rational
3L + 4r .. 7Lr
3L - 4r .. -1Lr
3L * 4r .. 12Lr
3L / 4r .. 3/4Lr
3L % 4r .. TypeError: can't evaluate (gmp.mpz % rational)
3L ** 4r .. TypeError: can't evaluate (gmp.mpz ** rational)
3L == 4r .. false
3L < 4r .. true
3L > 4r .. false
3L <= 4r .. true
3L >= 4r .. false
3L <=> 4r .. -1
3L in 4r .. false
3L & 4r .. TypeError: can't evaluate (gmp.mpz & rational)
3L | 4r .. TypeError: can't evaluate (gmp.mpz | rational)
3L ^ 4r .. TypeError: can't evaluate (gmp.mpz ^ rational)
3L << 4r .. TypeError: can't evaluate (gmp.mpz << rational)
3L >> 4r .. TypeError: can't evaluate (gmp.mpz >> rational)
3L || 4r .. 3L
3L && 4r .. 4r
3L => 4r .. TypeError: can't evaluate (gmp.mpz => rational)
gmp.mpq, gmp.mpz
3Lr + 4L .. 7Lr
3Lr - 4L .. -1Lr
3Lr * 4L .. 12Lr
3Lr / 4L .. 3/4Lr
3Lr % 4L .. TypeError: can't evaluate (gmp.mpq % gmp.mpz)
3Lr ** 4L .. TypeError: can't evaluate (gmp.mpq ** gmp.mpz)
3Lr == 4L .. false
3Lr < 4L .. true
3Lr > 4L .. false
3Lr <= 4L .. true
3Lr >= 4L .. false
3Lr <=> 4L .. -1
3Lr in 4L .. false
3Lr & 4L .. TypeError: can't evaluate (gmp.mpq & gmp.mpz)
3Lr | 4L .. TypeError: can't evaluate (gmp.mpq | gmp.mpz)
3Lr ^ 4L .. TypeError: can't evaluate (gmp.mpq ^ gmp.mpz)
3Lr << 4L .. TypeError: can't evaluate (gmp.mpq << gmp.mpz)
3Lr >> 4L .. TypeError: can't evaluate (gmp.mpq >> gmp.mpz)
3Lr || 4L .. 3Lr
3Lr && 4L .. 4L
3Lr => 4L .. TypeError: can't evaluate (gmp.mpq => gmp.mpz)
gmp.mpq, gmp.mpq
3Lr + 4Lr .. 7Lr
3Lr - 4Lr .. -1Lr
3Lr * 4Lr .. 12Lr
3Lr / 4Lr .. 3/4Lr
3Lr % 4Lr .. TypeError: can't evaluate (gmp.mpq % gmp.mpq)
3Lr ** 4Lr .. TypeError: can't evaluate (gmp.mpq ** gmp.mpq)
3Lr == 4Lr .. false
3Lr < 4Lr .. true
3Lr > 4Lr .. false
3Lr <= 4Lr .. true
3Lr >= 4Lr .. false
3Lr <=> 4Lr .. -1
3Lr in 4Lr .. false
3Lr & 4Lr .. TypeError: can't evaluate (gmp.mpq & gmp.mpq)
3Lr | 4Lr .. TypeError: can't evaluate (gmp.mpq | gmp.mpq)
3Lr ^ 4Lr .. TypeError: can't evaluate (gmp.mpq ^ gmp.mpq)
3Lr << 4Lr .. TypeError: can't evaluate (gmp.mpq << gmp.mpq)
3Lr >> 4Lr .. TypeError: can't evaluate (gmp.mpq >> gmp.mpq)
3Lr || 4Lr .. 3Lr
3Lr && 4Lr .. 4Lr
3Lr => 4Lr .. TypeError: can't evaluate (gmp.mpq => gmp.mpq)
gmp.mpq, gmp.mpf
3Lr + 4.L .. 7.L
3Lr - 4.L .. -1.L
3Lr * 4.L .. 12.L
3Lr / 4.L .. 0.75L
3Lr % 4.L .. TypeError: can't evaluate (gmp.mpq % gmp.mpf)
3Lr ** 4.L .. TypeError: can't evaluate (gmp.mpq ** gmp.mpf)
3Lr == 4.L .. false
3Lr < 4.L .. true
3Lr > 4.L .. false
3Lr <= 4.L .. true
3Lr >= 4.L .. false
3Lr <=> 4.L .. -1
3Lr in 4.L .. false
3Lr & 4.L .. TypeError: can't evaluate (gmp.mpq & gmp.mpf)
3Lr | 4.L .. TypeError: can't evaluate (gmp.mpq | gmp.mpf)
3Lr ^ 4.L .. TypeError: can't evaluate (gmp.mpq ^ gmp.mpf)
3Lr << 4.L .. TypeError: can't evaluate (gmp.mpq << gmp.mpf)
3Lr >> 4.L .. TypeError: can't evaluate (gmp.mpq >> gmp.mpf)
3Lr || 4.L .. 3Lr
3Lr && 4.L .. 4.L
3Lr => 4.L .. TypeError: can't evaluate (gmp.mpq => gmp.mpf)
gmp.mpq, number
3Lr + 4 .. 7Lr
3Lr - 4 .. -1Lr
3Lr * 4 .. 12Lr
3Lr / 4 .. 3/4Lr
3Lr % 4 .. TypeError: can't evaluate (gmp.mpq % number)
3Lr ** 4 .. TypeError: can't evaluate (gmp.mpq ** number)
3Lr == 4 .. false
3Lr < 4 .. true
3Lr > 4 .. false
3Lr <= 4 .. true
3Lr >= 4 .. false
3Lr <=> 4 .. -1
3Lr in 4 .. false
3Lr & 4 .. TypeError: can't evaluate (gmp.mpq & number)
3Lr | 4 .. TypeError: can't evaluate (gmp.mpq | number)
3Lr ^ 4 .. TypeError: can't evaluate (gmp.mpq ^ number)
3Lr << 4 .. TypeError: can't evaluate (gmp.mpq << number)
3Lr >> 4 .. TypeError: can't evaluate (gmp.mpq >> number)
3Lr || 4 .. 3Lr
3Lr && 4 .. 4
3Lr => 4 .. TypeError: can't evaluate (gmp.mpq => number)
gmp.mpq, rational
3Lr + 4r .. 7Lr
3Lr - 4r .. -1Lr
3Lr * 4r .. 12Lr
3Lr / 4r .. 3/4Lr
3Lr % 4r .. TypeError: can't evaluate (gmp.mpq % rational)
3Lr ** 4r .. TypeError: can't evaluate (gmp.mpq ** rational)
3Lr == 4r .. false
3Lr < 4r .. true
3Lr > 4r .. false
3Lr <= 4r .. true
3Lr >= 4r .. false
3Lr <=> 4r .. -1
3Lr in 4r .. false
3Lr & 4r .. TypeError: can't evaluate (gmp.mpq & rational)
3Lr | 4r .. TypeError: can't evaluate (gmp.mpq | rational)
3Lr ^ 4r .. TypeError: can't evaluate (gmp.mpq ^ rational)
3Lr << 4r .. TypeError: can't evaluate (gmp.mpq << rational)
3Lr >> 4r .. TypeError: can't evaluate (gmp.mpq >> rational)
3Lr || 4r .. 3Lr
3Lr && 4r .. 4r
3Lr => 4r .. TypeError: can't evaluate (gmp.mpq => rational)
gmp.mpf, gmp.mpz
3.L + 4L .. 7.L
3.L - 4L .. -1.L
3.L * 4L .. 12.L
3.L / 4L .. 0.75L
3.L % 4L .. TypeError: can't evaluate (gmp.mpf % gmp.mpz)
3.L ** 4L .. TypeError: can't evaluate (gmp.mpf ** gmp.mpz)
3.L == 4L .. false
3.L < 4L .. true
3.L > 4L .. false
3.L <= 4L .. true
3.L >= 4L .. false
3.L <=> 4L .. -1
3.L in 4L .. false
3.L & 4L .. TypeError: can't evaluate (gmp.mpf & gmp.mpz)
3.L | 4L .. TypeError: can't evaluate (gmp.mpf | gmp.mpz)
3.L ^ 4L .. TypeError: can't evaluate (gmp.mpf ^ gmp.mpz)
3.L << 4L .. TypeError: can't evaluate (gmp.mpf << gmp.mpz)
3.L >> 4L .. TypeError: can't evaluate (gmp.mpf >> gmp.mpz)
3.L || 4L .. 3.L
3.L && 4L .. 4L
3.L => 4L .. TypeError: can't evaluate (gmp.mpf => gmp.mpz)
gmp.mpf, gmp.mpq
3.L + 4Lr .. 7.L
3.L - 4Lr .. -1.L
3.L * 4Lr .. 12.L
3.L / 4Lr .. 0.75L
3.L % 4Lr .. TypeError: can't evaluate (gmp.mpf % gmp.mpq)
3.L ** 4Lr .. TypeError: can't evaluate (gmp.mpf ** gmp.mpq)
3.L == 4Lr .. false
3.L < 4Lr .. true
3.L > 4Lr .. false
3.L <= 4Lr .. true
3.L >= 4Lr .. false
3.L <=> 4Lr .. -1
3.L in 4Lr .. false
3.L & 4Lr .. TypeError: can't evaluate (gmp.mpf & gmp.mpq)
3.L | 4Lr .. TypeError: can't evaluate (gmp.mpf | gmp.mpq)
3.L ^ 4Lr .. TypeError: can't evaluate (gmp.mpf ^ gmp.mpq)
3.L << 4Lr .. TypeError: can't evaluate (gmp.mpf << gmp.mpq)
3.L >> 4Lr .. TypeError: can't evaluate (gmp.mpf >> gmp.mpq)
3.L || 4Lr .. 3.L
3.L && 4Lr .. 4Lr
3.L => 4Lr .. TypeError: can't evaluate (gmp.mpf => gmp.mpq)
gmp.mpf, gmp.mpf
3.L + 4.L .. 7.L
3.L - 4.L .. -1.L
3.L * 4.L .. 12.L
3.L / 4.L .. 0.75L
3.L % 4.L .. TypeError: can't evaluate (gmp.mpf % gmp.mpf)
3.L ** 4.L .. TypeError: can't evaluate (gmp.mpf ** gmp.mpf)
3.L == 4.L .. false
3.L < 4.L .. true
3.L > 4.L .. false
3.L <= 4.L .. true
3.L >= 4.L .. false
3.L <=> 4.L .. -1
3.L in 4.L .. false
3.L & 4.L .. TypeError: can't evaluate (gmp.mpf & gmp.mpf)
3.L | 4.L .. TypeError: can't evaluate (gmp.mpf | gmp.mpf)
3.L ^ 4.L .. TypeError: can't evaluate (gmp.mpf ^ gmp.mpf)
3.L << 4.L .. TypeError: can't evaluate (gmp.mpf << gmp.mpf)
3.L >> 4.L .. TypeError: can't evaluate (gmp.mpf >> gmp.mpf)
3.L || 4.L .. 3.L
3.L && 4.L .. 4.L
3.L => 4.L .. TypeError: can't evaluate (gmp.mpf => gmp.mpf)
gmp.mpf, number
3.L + 4 .. 7.L
3.L - 4 .. -1.L
3.L * 4 .. 12.L
3.L / 4 .. 0.75L
3.L % 4 .. TypeError: can't evaluate (gmp.mpf % number)
3.L ** 4 .. TypeError: can't evaluate (gmp.mpf ** number)
3.L == 4 .. false
3.L < 4 .. true
3.L > 4 .. false
3.L <= 4 .. true
3.L >= 4 .. false
3.L <=> 4 .. -1
3.L in 4 .. false
3.L & 4 .. TypeError: can't evaluate (gmp.mpf & number)
3.L | 4 .. TypeError: can't evaluate (gmp.mpf | number)
3.L ^ 4 .. TypeError: can't evaluate (gmp.mpf ^ number)
3.L << 4 .. TypeError: can't evaluate (gmp.mpf << number)
3.L >> 4 .. TypeError: can't evaluate (gmp.mpf >> number)
3.L || 4 .. 3.L
3.L && 4 .. 4
3.L => 4 .. TypeError: can't evaluate (gmp.mpf => number)
gmp.mpf, rational
3.L + 4r .. 7.L
3.L - 4r .. -1.L
3.L * 4r .. 12.L
3.L / 4r .. 0.75L
3.L % 4r .. TypeError: can't evaluate (gmp.mpf % rational)
3.L ** 4r .. TypeError: can't evaluate (gmp.mpf ** rational)
3.L == 4r .. false
3.L < 4r .. true
3.L > 4r .. false
3.L <= 4r .. true
3.L >= 4r .. false
3.L <=> 4r .. -1
3.L in 4r .. false
3.L & 4r .. TypeError: can't evaluate (gmp.mpf & rational)
3.L | 4r .. TypeError: can't evaluate (gmp.mpf | rational)
3.L ^ 4r .. TypeError: can't evaluate (gmp.mpf ^ rational)
3.L << 4r .. TypeError: can't evaluate (gmp.mpf << rational)
3.L >> 4r .. TypeError: can't evaluate (gmp.mpf >> rational)
3.L || 4r .. 3.L
3.L && 4r .. 4r
3.L => 4r .. TypeError: can't evaluate (gmp.mpf => rational)
number, gmp.mpz
3 + 4L .. 7L
3 - 4L .. -1L
3 * 4L .. 12L
3 / 4L .. 0.75L
3 % 4L .. 3L
3 ** 4L .. TypeError: can't evaluate (number ** gmp.mpz)
3 == 4L .. false
3 < 4L .. true
3 > 4L .. false
3 <= 4L .. true
3 >= 4L .. false
3 <=> 4L .. -1
3 in 4L .. false
3 & 4L .. 0L
3 | 4L .. 7L
3 ^ 4L .. 7L
3 << 4L .. TypeError: can't evaluate (number << gmp.mpz)
3 >> 4L .. TypeError: can't evaluate (number >> gmp.mpz)
3 || 4L .. 3
3 && 4L .. 4L
3 => 4L .. [3, 4L]
number, gmp.mpq
3 + 4Lr .. 7Lr
3 - 4Lr .. -1Lr
3 * 4Lr .. 12Lr
3 / 4Lr .. 3/4Lr
3 % 4Lr .. TypeError: can't evaluate (number % gmp.mpq)
3 ** 4Lr .. TypeError: can't evaluate (number ** gmp.mpq)
3 == 4Lr .. false
3 < 4Lr .. true
3 > 4Lr .. false
3 <= 4Lr .. true
3 >= 4Lr .. false
3 <=> 4Lr .. -1
3 in 4Lr .. false
3 & 4Lr .. TypeError: can't evaluate (number & gmp.mpq)
3 | 4Lr .. TypeError: can't evaluate (number | gmp.mpq)
3 ^ 4Lr .. TypeError: can't evaluate (number ^ gmp.mpq)
3 << 4Lr .. TypeError: can't evaluate (number << gmp.mpq)
3 >> 4Lr .. TypeError: can't evaluate (number >> gmp.mpq)
3 || 4Lr .. 3
3 && 4Lr .. 4Lr
3 => 4Lr .. [3, 4Lr]
number, gmp.mpf
3 + 4.L .. 7.L
3 - 4.L .. -1.L
3 * 4.L .. 12.L
3 / 4.L .. 0.75L
3 % 4.L .. TypeError: can't evaluate (number % gmp.mpf)
3 ** 4.L .. TypeError: can't evaluate (number ** gmp.mpf)
3 == 4.L .. false
3 < 4.L .. true
3 > 4.L .. false
3 <= 4.L .. true
3 >= 4.L .. false
3 <=> 4.L .. -1
3 in 4.L .. false
3 & 4.L .. TypeError: can't evaluate (number & gmp.mpf)
3 | 4.L .. TypeError: can't evaluate (number | gmp.mpf)
3 ^ 4.L .. TypeError: can't evaluate (number ^ gmp.mpf)
3 << 4.L .. TypeError: can't evaluate (number << gmp.mpf)
3 >> 4.L .. TypeError: can't evaluate (number >> gmp.mpf)
3 || 4.L .. 3
3 && 4.L .. 4.L
3 => 4.L .. [3, 4.L]
number, number
3 + 4 .. 7
3 - 4 .. -1
3 * 4 .. 12
3 / 4 .. 0.75
3 % 4 .. 3
3 ** 4 .. 81
3 == 4 .. false
3 < 4 .. true
3 > 4 .. false
3 <= 4 .. true
3 >= 4 .. false
3 <=> 4 .. -1
3 in 4 .. false
3 & 4 .. 0
3 | 4 .. 7
3 ^ 4 .. 7
3 << 4 .. 48
3 >> 4 .. 0
3 || 4 .. 3
3 && 4 .. 4
3 => 4 .. [3, 4]
number, rational
3 + 4r .. 7r
3 - 4r .. -1r
3 * 4r .. 12r
3 / 4r .. 3/4r
3 % 4r .. TypeError: can't evaluate (number % rational)
3 ** 4r .. TypeError: can't evaluate (number ** rational)
3 == 4r .. false
3 < 4r .. true
3 > 4r .. false
3 <= 4r .. true
3 >= 4r .. false
3 <=> 4r .. -1
3 in 4r .. false
3 & 4r .. TypeError: can't evaluate (number & rational)
3 | 4r .. TypeError: can't evaluate (number | rational)
3 ^ 4r .. TypeError: can't evaluate (number ^ rational)
3 << 4r .. TypeError: can't evaluate (number << rational)
3 >> 4r .. TypeError: can't evaluate (number >> rational)
3 || 4r .. 3
3 && 4r .. 4r
3 => 4r .. [3, 4r]
rational, gmp.mpz
3r + 4L .. 7Lr
3r - 4L .. -1Lr
3r * 4L .. 12Lr
3r / 4L .. 3/4Lr
3r % 4L .. TypeError: can't evaluate (rational % gmp.mpz)
3r ** 4L .. TypeError: can't evaluate (rational ** gmp.mpz)
3r == 4L .. false
3r < 4L .. true
3r > 4L .. false
3r <= 4L .. true
3r >= 4L .. false
3r <=> 4L .. -1
3r in 4L .. false
3r & 4L .. TypeError: can't evaluate (rational & gmp.mpz)
3r | 4L .. TypeError: can't evaluate (rational | gmp.mpz)
3r ^ 4L .. TypeError: can't evaluate (rational ^ gmp.mpz)
3r << 4L .. TypeError: can't evaluate (rational << gmp.mpz)
3r >> 4L .. TypeError: can't evaluate (rational >> gmp.mpz)
3r || 4L .. 3r
3r && 4L .. 4L
3r => 4L .. TypeError: can't evaluate (rational => gmp.mpz)
rational, gmp.mpq
3r + 4Lr .. 7Lr
3r - 4Lr .. -1Lr
3r * 4Lr .. 12Lr
3r / 4Lr .. 3/4Lr
3r % 4Lr .. TypeError: can't evaluate (rational % gmp.mpq)
3r ** 4Lr .. TypeError: can't evaluate (rational ** gmp.mpq)
3r == 4Lr .. false
3r < 4Lr .. true
3r > 4Lr .. false
3r <= 4Lr .. true
3r >= 4Lr .. false
3r <=> 4Lr .. -1
3r in 4Lr .. false
3r & 4Lr .. TypeError: can't evaluate (rational & gmp.mpq)
3r | 4Lr .. TypeError: can't evaluate (rational | gmp.mpq)
3r ^ 4Lr .. TypeError: can't evaluate (rational ^ gmp.mpq)
3r << 4Lr .. TypeError: can't evaluate (rational << gmp.mpq)
3r >> 4Lr .. TypeError: can't evaluate (rational >> gmp.mpq)
3r || 4Lr .. 3r
3r && 4Lr .. 4Lr
3r => 4Lr .. TypeError: can't evaluate (rational => gmp.mpq)
rational, gmp.mpf
3r + 4.L .. 7.L
3r - 4.L .. -1.L
3r * 4.L .. 12.L
3r / 4.L .. 0.75L
3r % 4.L .. TypeError: can't evaluate (rational % gmp.mpf)
3r ** 4.L .. TypeError: can't evaluate (rational ** gmp.mpf)
3r == 4.L .. false
3r < 4.L .. true
3r > 4.L .. false
3r <= 4.L .. true
3r >= 4.L .. false
3r <=> 4.L .. -1
3r in 4.L .. false
3r & 4.L .. TypeError: can't evaluate (rational & gmp.mpf)
3r | 4.L .. TypeError: can't evaluate (rational | gmp.mpf)
3r ^ 4.L .. TypeError: can't evaluate (rational ^ gmp.mpf)
3r << 4.L .. TypeError: can't evaluate (rational << gmp.mpf)
3r >> 4.L .. TypeError: can't evaluate (rational >> gmp.mpf)
3r || 4.L .. 3r
3r && 4.L .. 4.L
3r => 4.L .. TypeError: can't evaluate (rational => gmp.mpf)
rational, number
3r + 4 .. 7r
3r - 4 .. -1r
3r * 4 .. 12r
3r / 4 .. 3/4r
3r % 4 .. TypeError: can't evaluate (rational % number)
3r ** 4 .. TypeError: can't evaluate (rational ** number)
3r == 4 .. false
3r < 4 .. true
3r > 4 .. false
3r <= 4 .. true
3r >= 4 .. false
3r <=> 4 .. -1
3r in 4 .. false
3r & 4 .. TypeError: can't evaluate (rational & number)
3r | 4 .. TypeError: can't evaluate (rational | number)
3r ^ 4 .. TypeError: can't evaluate (rational ^ number)
3r << 4 .. TypeError: can't evaluate (rational << number)
3r >> 4 .. TypeError: can't evaluate (rational >> number)
3r || 4 .. 3r
3r && 4 .. 4
3r => 4 .. TypeError: can't evaluate (rational => number)
rational, rational
3r + 4r .. 7r
3r - 4r .. -1r
3r * 4r .. 12r
3r / 4r .. 3/4r
3r % 4r .. TypeError: can't evaluate (rational % rational)
3r ** 4r .. TypeError: can't evaluate (rational ** rational)
3r == 4r .. false
3r < 4r .. true
3r > 4r .. false
3r <= 4r .. true
3r >= 4r .. false
3r <=> 4r .. -1
3r in 4r .. false
3r & 4r .. TypeError: can't evaluate (rational & rational)
3r | 4r .. TypeError: can't evaluate (rational | rational)
3r ^ 4r .. TypeError: can't evaluate (rational ^ rational)
3r << 4r .. TypeError: can't evaluate (rational << rational)
3r >> 4r .. TypeError: can't evaluate (rational >> rational)
3r || 4r .. 3r
3r && 4r .. 4r
3r => 4r .. TypeError: can't evaluate (rational => rational)

======== #4 zero-division ========

gmp.mpz, gmp.mpz
3L / 0L .. ZeroDivisionError: divide by zero
3L % 0L .. ZeroDivisionError: divide by zero
gmp.mpz, gmp.mpq
3L / 0Lr .. ZeroDivisionError: divide by zero
3L % 0Lr .. TypeError: can't evaluate (gmp.mpz % gmp.mpq)
gmp.mpz, gmp.mpf
3L / 0.L .. ZeroDivisionError: divide by zero
3L % 0.L .. TypeError: can't evaluate (gmp.mpz % gmp.mpf)
gmp.mpz, number
3L / 0 .. ZeroDivisionError: divide by zero
3L % 0 .. ZeroDivisionError: divide by zero
gmp.mpz, rational
3L / 0r .. ZeroDivisionError: divide by zero
3L % 0r .. TypeError: can't evaluate (gmp.mpz % rational)
gmp.mpq, gmp.mpz
3Lr / 0L .. ZeroDivisionError: divide by zero
3Lr % 0L .. TypeError: can't evaluate (gmp.mpq % gmp.mpz)
gmp.mpq, gmp.mpq
3Lr / 0Lr .. ZeroDivisionError: divide by zero
3Lr % 0Lr .. TypeError: can't evaluate (gmp.mpq % gmp.mpq)
gmp.mpq, gmp.mpf
3Lr / 0.L .. ZeroDivisionError: divide by zero
3Lr % 0.L .. TypeError: can't evaluate (gmp.mpq % gmp.mpf)
gmp.mpq, number
3Lr / 0 .. ZeroDivisionError: divide by zero
3Lr % 0 .. TypeError: can't evaluate (gmp.mpq % number)
gmp.mpq, rational
3Lr / 0r .. ZeroDivisionError: divide by zero
3Lr % 0r .. TypeError: can't evaluate (gmp.mpq % rational)
gmp.mpf, gmp.mpz
3.L / 0L .. ZeroDivisionError: divide by zero
3.L % 0L .. TypeError: can't evaluate (gmp.mpf % gmp.mpz)
gmp.mpf, gmp.mpq
3.L / 0Lr .. ZeroDivisionError: divide by zero
3.L % 0Lr .. TypeError: can't evaluate (gmp.mpf % gmp.mpq)
gmp.mpf, gmp.mpf
3.L / 0.L .. ZeroDivisionError: divide by zero
3.L % 0.L .. TypeError: can't evaluate (gmp.mpf % gmp.mpf)
gmp.mpf, number
3.L / 0 .. ZeroDivisionError: divide by zero
3.L % 0 .. TypeError: can't evaluate (gmp.mpf % number)
gmp.mpf, rational
3.L / 0r .. ZeroDivisionError: divide by zero
3.L % 0r .. TypeError: can't evaluate (gmp.mpf % rational)
number, gmp.mpz
3 / 0L .. ZeroDivisionError: divide by zero
3 % 0L .. ZeroDivisionError: divide by zero
number, gmp.mpq
3 / 0Lr .. ZeroDivisionError: divide by zero
3 % 0Lr .. TypeError: can't evaluate (number % gmp.mpq)
number, gmp.mpf
3 / 0.L .. ZeroDivisionError: divide by zero
3 % 0.L .. TypeError: can't evaluate (number % gmp.mpf)
number, number
3 / 0 .. ZeroDivisionError: divide by zero
3 % 0 .. ZeroDivisionError: divide by zero
number, rational
3 / 0r .. ZeroDivisionError: denominator can't be zero
3 % 0r .. TypeError: can't evaluate (number % rational)
rational, gmp.mpz
3r / 0L .. ZeroDivisionError: divide by zero
3r % 0L .. TypeError: can't evaluate (rational % gmp.mpz)
rational, gmp.mpq
3r / 0Lr .. ZeroDivisionError: divide by zero
3r % 0Lr .. TypeError: can't evaluate (rational % gmp.mpq)
rational, gmp.mpf
3r / 0.L .. ZeroDivisionError: divide by zero
3r % 0.L .. TypeError: can't evaluate (rational % gmp.mpf)
rational, number
3r / 0 .. ZeroDivisionError: denominator can't be zero
3r % 0 .. TypeError: can't evaluate (rational % number)
rational, rational
3r / 0r .. ZeroDivisionError: denominator can't be zero
3r % 0r .. TypeError: can't evaluate (rational % rational)

======== #5 comparator ========

gmp.mpz, gmp.mpz
3L == 4L .. false
3L < 4L .. true
3L > 4L .. false
3L <= 4L .. true
3L >= 4L .. false
3L <=> 4L .. -1
gmp.mpz, gmp.mpq
3L == 4Lr .. false
3L < 4Lr .. true
3L > 4Lr .. false
3L <= 4Lr .. true
3L >= 4Lr .. false
3L <=> 4Lr .. -1
gmp.mpz, gmp.mpf
3L == 4.L .. false
3L < 4.L .. true
3L > 4.L .. false
3L <= 4.L .. true
3L >= 4.L .. false
3L <=> 4.L .. -1
gmp.mpz, number
3L == 4 .. false
3L < 4 .. true
3L > 4 .. false
3L <= 4 .. true
3L >= 4 .. false
3L <=> 4 .. -1
gmp.mpz, rational
3L == 4r .. false
3L < 4r .. true
3L > 4r .. false
3L <= 4r .. true
3L >= 4r .. false
3L <=> 4r .. -1
gmp.mpq, gmp.mpz
3Lr == 4L .. false
3Lr < 4L .. true
3Lr > 4L .. false
3Lr <= 4L .. true
3Lr >= 4L .. false
3Lr <=> 4L .. -1
gmp.mpq, gmp.mpq
3Lr == 4Lr .. false
3Lr < 4Lr .. true
3Lr > 4Lr .. false
3Lr <= 4Lr .. true
3Lr >= 4Lr .. false
3Lr <=> 4Lr .. -1
gmp.mpq, gmp.mpf
3Lr == 4.L .. false
3Lr < 4.L .. true
3Lr > 4.L .. false
3Lr <= 4.L .. true
3Lr >= 4.L .. false
3Lr <=> 4.L .. -1
gmp.mpq, number
3Lr == 4 .. false
3Lr < 4 .. true
3Lr > 4 .. false
3Lr <= 4 .. true
3Lr >= 4 .. false
3Lr <=> 4 .. -1
gmp.mpq, rational
3Lr == 4r .. false
3Lr < 4r .. true
3Lr > 4r .. false
3Lr <= 4r .. true
3Lr >= 4r .. false
3Lr <=> 4r .. -1
gmp.mpf, gmp.mpz
3.L == 4L .. false
3.L < 4L .. true
3.L > 4L .. false
3.L <= 4L .. true
3.L >= 4L .. false
3.L <=> 4L .. -1
gmp.mpf, gmp.mpq
3.L == 4Lr .. false
3.L < 4Lr .. true
3.L > 4Lr .. false
3.L <= 4Lr .. true
3.L >= 4Lr .. false
3.L <=> 4Lr .. -1
gmp.mpf, gmp.mpf
3.L == 4.L .. false
3.L < 4.L .. true
3.L > 4.L .. false
3.L <= 4.L .. true
3.L >= 4.L .. false
3.L <=> 4.L .. -1
gmp.mpf, number
3.L == 4 .. false
3.L < 4 .. true
3.L > 4 .. false
3.L <= 4 .. true
3.L >= 4 .. false
3.L <=> 4 .. -1
gmp.mpf, rational
3.L == 4r .. false
3.L < 4r .. true
3.L > 4r .. false
3.L <= 4r .. true
3.L >= 4r .. false
3.L <=> 4r .. -1
number, gmp.mpz
3 == 4L .. false
3 < 4L .. true
3 > 4L .. false
3 <= 4L .. true
3 >= 4L .. false
3 <=> 4L .. -1
number, gmp.mpq
3 == 4Lr .. false
3 < 4Lr .. true
3 > 4Lr .. false
3 <= 4Lr .. true
3 >= 4Lr .. false
3 <=> 4Lr .. -1
number, gmp.mpf
3 == 4.L .. false
3 < 4.L .. true
3 > 4.L .. false
3 <= 4.L .. true
3 >= 4.L .. false
3 <=> 4.L .. -1
number, number
3 == 4 .. false
3 < 4 .. true
3 > 4 .. false
3 <= 4 .. true
3 >= 4 .. false
3 <=> 4 .. -1
number, rational
3 == 4r .. false
3 < 4r .. true
3 > 4r .. false
3 <= 4r .. true
3 >= 4r .. false
3 <=> 4r .. -1
rational, gmp.mpz
3r == 4L .. false
3r < 4L .. true
3r > 4L .. false
3r <= 4L .. true
3r >= 4L .. false
3r <=> 4L .. -1
rational, gmp.mpq
3r == 4Lr .. false
3r < 4Lr .. true
3r > 4Lr .. false
3r <= 4Lr .. true
3r >= 4Lr .. false
3r <=> 4Lr .. -1
rational, gmp.mpf
3r == 4.L .. false
3r < 4.L .. true
3r > 4.L .. false
3r <= 4.L .. true
3r >= 4.L .. false
3r <=> 4.L .. -1
rational, number
3r == 4 .. false
3r < 4 .. true
3r > 4 .. false
3r <= 4 .. true
3r >= 4 .. false
3r <=> 4 .. -1
rational, rational
3r == 4r .. false
3r < 4r .. true
3r > 4r .. false
3r <= 4r .. true
3r >= 4r .. false
3r <=> 4r .. -1
gmp.mpz, gmp.mpz
4L == 4L .. true
4L < 4L .. false
4L > 4L .. false
4L <= 4L .. true
4L >= 4L .. true
4L <=> 4L .. 0
gmp.mpz, gmp.mpq
4L == 4Lr .. true
4L < 4Lr .. false
4L > 4Lr .. false
4L <= 4Lr .. true
4L >= 4Lr .. true
4L <=> 4Lr .. 0
gmp.mpz, gmp.mpf
4L == 4.L .. true
4L < 4.L .. false
4L > 4.L .. false
4L <= 4.L .. true
4L >= 4.L .. true
4L <=> 4.L .. 0
gmp.mpz, number
4L == 4 .. true
4L < 4 .. false
4L > 4 .. false
4L <= 4 .. true
4L >= 4 .. true
4L <=> 4 .. 0
gmp.mpz, rational
4L == 4r .. true
4L < 4r .. false
4L > 4r .. false
4L <= 4r .. true
4L >= 4r .. true
4L <=> 4r .. 0
gmp.mpq, gmp.mpz
4Lr == 4L .. true
4Lr < 4L .. false
4Lr > 4L .. false
4Lr <= 4L .. true
4Lr >= 4L .. true
4Lr <=> 4L .. 0
gmp.mpq, gmp.mpq
4Lr == 4Lr .. true
4Lr < 4Lr .. false
4Lr > 4Lr .. false
4Lr <= 4Lr .. true
4Lr >= 4Lr .. true
4Lr <=> 4Lr .. 0
gmp.mpq, gmp.mpf
4Lr == 4.L .. true
4Lr < 4.L .. false
4Lr > 4.L .. false
4Lr <= 4.L .. true
4Lr >= 4.L .. true
4Lr <=> 4.L .. 0
gmp.mpq, number
4Lr == 4 .. true
4Lr < 4 .. false
4Lr > 4 .. false
4Lr <= 4 .. true
4Lr >= 4 .. true
4Lr <=> 4 .. 0
gmp.mpq, rational
4Lr == 4r .. true
4Lr < 4r .. false
4Lr > 4r .. false
4Lr <= 4r .. true
4Lr >= 4r .. true
4Lr <=> 4r .. 0
gmp.mpf, gmp.mpz
4.L == 4L .. true
4.L < 4L .. false
4.L > 4L .. false
4.L <= 4L .. true
4.L >= 4L .. true
4.L <=> 4L .. 0
gmp.mpf, gmp.mpq
4.L == 4Lr .. true
4.L < 4Lr .. false
4.L > 4Lr .. false
4.L <= 4Lr .. true
4.L >= 4Lr .. true
4.L <=> 4Lr .. 0
gmp.mpf, gmp.mpf
4.L == 4.L .. true
4.L < 4.L .. false
4.L > 4.L .. false
4.L <= 4.L .. true
4.L >= 4.L .. true
4.L <=> 4.L .. 0
gmp.mpf, number
4.L == 4 .. true
4.L < 4 .. false
4.L > 4 .. false
4.L <= 4 .. true
4.L >= 4 .. true
4.L <=> 4 .. 0
gmp.mpf, rational
4.L == 4r .. true
4.L < 4r .. false
4.L > 4r .. false
4.L <= 4r .. true
4.L >= 4r .. true
4.L <=> 4r .. 0
number, gmp.mpz
4 == 4L .. true
4 < 4L .. false
4 > 4L .. false
4 <= 4L .. true
4 >= 4L .. true
4 <=> 4L .. 0
number, gmp.mpq
4 == 4Lr .. true
4 < 4Lr .. false
4 > 4Lr .. false
4 <= 4Lr .. true
4 >= 4Lr .. true
4 <=> 4Lr .. 0
number, gmp.mpf
4 == 4.L .. true
4 < 4.L .. false
4 > 4.L .. false
4 <= 4.L .. true
4 >= 4.L .. true
4 <=> 4.L .. 0
number, number
4 == 4 .. true
4 < 4 .. false
4 > 4 .. false
4 <= 4 .. true
4 >= 4 .. true
4 <=> 4 .. 0
number, rational
4 == 4r .. true
4 < 4r .. false
4 > 4r .. false
4 <= 4r .. true
4 >= 4r .. true
4 <=> 4r .. 0
rational, gmp.mpz
4r == 4L .. true
4r < 4L .. false
4r > 4L .. false
4r <= 4L .. true
4r >= 4L .. true
4r <=> 4L .. 0
rational, gmp.mpq
4r == 4Lr .. true
4r < 4Lr .. false
4r > 4Lr .. false
4r <= 4Lr .. true
4r >= 4Lr .. true
4r <=> 4Lr .. 0
rational, gmp.mpf
4r == 4.L .. true
4r < 4.L .. false
4r > 4.L .. false
4r <= 4.L .. true
4r >= 4.L .. true
4r <=> 4.L .. 0
rational, number
4r == 4 .. true
4r < 4 .. false
4r > 4 .. false
4r <= 4 .. true
4r >= 4 .. true
4r <=> 4 .. 0
rational, rational
4r == 4r .. true
4r < 4r .. false
4r > 4r .. false
4r <= 4r .. true
4r >= 4r .. true
4r <=> 4r .. 0
gmp.mpz, gmp.mpz
5L == 4L .. false
5L < 4L .. false
5L > 4L .. true
5L <= 4L .. false
5L >= 4L .. true
5L <=> 4L .. 1
gmp.mpz, gmp.mpq
5L == 4Lr .. false
5L < 4Lr .. false
5L > 4Lr .. true
5L <= 4Lr .. false
5L >= 4Lr .. true
5L <=> 4Lr .. 1
gmp.mpz, gmp.mpf
5L == 4.L .. false
5L < 4.L .. false
5L > 4.L .. true
5L <= 4.L .. false
5L >= 4.L .. true
5L <=> 4.L .. 1
gmp.mpz, number
5L == 4 .. false
5L < 4 .. false
5L > 4 .. true
5L <= 4 .. false
5L >= 4 .. true
5L <=> 4 .. 1
gmp.mpz, rational
5L == 4r .. false
5L < 4r .. false
5L > 4r .. true
5L <= 4r .. false
5L >= 4r .. true
5L <=> 4r .. 1
gmp.mpq, gmp.mpz
5Lr == 4L .. false
5Lr < 4L .. false
5Lr > 4L .. true
5Lr <= 4L .. false
5Lr >= 4L .. true
5Lr <=> 4L .. 1
gmp.mpq, gmp.mpq
5Lr == 4Lr .. false
5Lr < 4Lr .. false
5Lr > 4Lr .. true
5Lr <= 4Lr .. false
5Lr >= 4Lr .. true
5Lr <=> 4Lr .. 1
gmp.mpq, gmp.mpf
5Lr == 4.L .. false
5Lr < 4.L .. false
5Lr > 4.L .. true
5Lr <= 4.L .. false
5Lr >= 4.L .. true
5Lr <=> 4.L .. 1
gmp.mpq, number
5Lr == 4 .. false
5Lr < 4 .. false
5Lr > 4 .. true
5Lr <= 4 .. false
5Lr >= 4 .. true
5Lr <=> 4 .. 1
gmp.mpq, rational
5Lr == 4r .. false
5Lr < 4r .. false
5Lr > 4r .. true
5Lr <= 4r .. false
5Lr >= 4r .. true
5Lr <=> 4r .. 1
gmp.mpf, gmp.mpz
5.L == 4L .. false
5.L < 4L .. false
5.L > 4L .. true
5.L <= 4L .. false
5.L >= 4L .. true
5.L <=> 4L .. 1
gmp.mpf, gmp.mpq
5.L == 4Lr .. false
5.L < 4Lr .. false
5.L > 4Lr .. true
5.L <= 4Lr .. false
5.L >= 4Lr .. true
5.L <=> 4Lr .. 1
gmp.mpf, gmp.mpf
5.L == 4.L .. false
5.L < 4.L .. false
5.L > 4.L .. true
5.L <= 4.L .. false
5.L >= 4.L .. true
5.L <=> 4.L .. 1
gmp.mpf, number
5.L == 4 .. false
5.L < 4 .. false
5.L > 4 .. true
5.L <= 4 .. false
5.L >= 4 .. true
5.L <=> 4 .. 1
gmp.mpf, rational
5.L == 4r .. false
5.L < 4r .. false
5.L > 4r .. true
5.L <= 4r .. false
5.L >= 4r .. true
5.L <=> 4r .. 1
number, gmp.mpz
5 == 4L .. false
5 < 4L .. false
5 > 4L .. true
5 <= 4L .. false
5 >= 4L .. true
5 <=> 4L .. 1
number, gmp.mpq
5 == 4Lr .. false
5 < 4Lr .. false
5 > 4Lr .. true
5 <= 4Lr .. false
5 >= 4Lr .. true
5 <=> 4Lr .. 1
number, gmp.mpf
5 == 4.L .. false
5 < 4.L .. false
5 > 4.L .. true
5 <= 4.L .. false
5 >= 4.L .. true
5 <=> 4.L .. 1
number, number
5 == 4 .. false
5 < 4 .. false
5 > 4 .. true
5 <= 4 .. false
5 >= 4 .. true
5 <=> 4 .. 1
number, rational
5 == 4r .. false
5 < 4r .. false
5 > 4r .. true
5 <= 4r .. false
5 >= 4r .. true
5 <=> 4r .. 1
rational, gmp.mpz
5r == 4L .. false
5r < 4L .. false
5r > 4L .. true
5r <= 4L .. false
5r >= 4L .. true
5r <=> 4L .. 1
rational, gmp.mpq
5r == 4Lr .. false
5r < 4Lr .. false
5r > 4Lr .. true
5r <= 4Lr .. false
5r >= 4Lr .. true
5r <=> 4Lr .. 1
rational, gmp.mpf
5r == 4.L .. false
5r < 4.L .. false
5r > 4.L .. true
5r <= 4.L .. false
5r >= 4.L .. true
5r <=> 4.L .. 1
rational, number
5r == 4 .. false
5r < 4 .. false
5r > 4 .. true
5r <= 4 .. false
5r >= 4 .. true
5r <=> 4 .. 1
rational, rational
5r == 4r .. false
5r < 4r .. false
5r > 4r .. true
5r <= 4r .. false
5r >= 4r .. true
5r <=> 4r .. 1

======== #6 precision for mpf ========

prec=10    3.14159292035398230088
prec=100   3.141592920353982300884955752212389380531
prec=1000  3.141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424779
prec=9900  3.14159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991

======== #7 Formatter test - basic ========

%d        |0                   |0                   
%u        |0                   |0                   
%o        |0                   |0                   
%x        |0                   |0                   
%e        |0.000000e+00        |0.000000e+00        
%f        |0.000000            |0.000000            
%g        |0                   |0                   
%d        |0                   |0                   
%u        |0                   |0                   
%o        |0                   |0                   
%x        |0                   |0                   
%e        |0.000000e+00        |0.000000e+00        
%f        |0.000000            |0.000000            
%g        |0                   |0                   
%d        |1                   |1                   
%u        |1                   |1                   
%o        |1                   |1                   
%x        |1                   |1                   
%e        |1.000000e+00        |1.000000e+00        
%f        |1.000000            |1.000000            
%g        |1                   |1                   
%d        |2                   |2                   
%u        |2                   |2                   
%o        |2                   |2                   
%x        |2                   |2                   
%e        |2.000000e+00        |2.000000e+00        
%f        |2.000000            |2.000000            
%g        |2                   |2                   
%d        |8                   |8                   
%u        |8                   |8                   
%o        |10                  |10                  
%x        |8                   |8                   
%e        |8.000000e+00        |8.000000e+00        
%f        |8.000000            |8.000000            
%g        |8                   |8                   
%d        |10                  |10                  
%u        |10                  |10                  
%o        |12                  |12                  
%x        |a                   |a                   
%e        |1.000000e+01        |1.000000e+01        
%f        |10.000000           |10.000000           
%g        |10                  |10                  
%d        |16                  |16                  
%u        |16                  |16                  
%o        |20                  |20                  
%x        |10                  |10                  
%e        |1.600000e+01        |1.600000e+01        
%f        |16.000000           |16.000000           
%g        |16                  |16                  

======== #8 Formatter test - specifier in upper case ========

%x        |bc614e              |bc614e              
%X        |BC614E              |BC614E              
%e        |1.234568e-10        |1.234568e-10        
%E        |1.234568E-10        |1.234568E-10        
%g        |1.23457e-10         |1.23457e-10         
%G        |1.23457E-10         |1.23457E-10         

======== #9 Formatter test - specifier d, u, o, x ========

%1d       |12345678            |12345678            
%10d      |  12345678          |  12345678          
%-10d$    |12345678  $         |12345678  $         
%010d     |0012345678          |0012345678          
%-010d    |12345678            |12345678            
%#d       |12345678            |12345678            
%#010d    |0012345678          |0012345678          
%1u       |12345678            |12345678            
%10u      |  12345678          |  12345678          
%-10u$    |12345678  $         |12345678  $         
%010u     |0012345678          |0012345678          
%-010u    |12345678            |12345678            
%#u       |12345678            |12345678            
%#010u    |0012345678          |0012345678          
%1o       |57060516            |57060516            
%10o      |  57060516          |  57060516          
%-10o$    |57060516  $         |57060516  $         
%010o     |0057060516          |0057060516          
%-010o    |57060516            |57060516            
%#o       |057060516           |057060516           
%#010o    |0057060516          |0057060516          
%1x       |bc614e              |bc614e              
%10x      |    bc614e          |    bc614e          
%-10x$    |bc614e    $         |bc614e    $         
%010x     |0000bc614e          |0000bc614e          
%-010x    |bc614e              |bc614e              
%#x       |0xbc614e            |0xbc614e            
%#010x    |000xbc614e          |0x00bc614e          

======== #10 Formatter test - specifier e, f, g ========

%1e       |0.000000e+00        |0.000000e+00        
%10e      |0.000000e+00        |0.000000e+00        
%.e       |0.000000e+00        |0e+00               
%.0e      |0e+00               |0e+00               
%.1e      |0.0e+00             |0.0e+00             
%.6e      |0.000000e+00        |0.000000e+00        
%.10e     |0.0000000000e+00    |0.0000000000e+00    
%.12e     |0.000000000000e+00  |0.000000000000e+00  
%3.3e     |0.000e+00           |0.000e+00           
%13.3e    |    0.000e+00       |    0.000e+00       
%-13.3e$  |0.000e+00    $      |0.000e+00    $      
%013.3e   |00000.000e+00       |00000.000e+00       
%1e       |1.428571e+04        |1.428571e+04        
%10e      |1.428571e+04        |1.428571e+04        
%.e       |1.428571e+04        |1.42857142857142857143e+04
%.0e      |1e+04               |1e+04               
%.1e      |1.4e+04             |1.4e+04             
%.6e      |1.428571e+04        |1.428571e+04        
%.10e     |1.4285714286e+04    |1.4285714286e+04    
%.12e     |1.428571428571e+04  |1.428571428571e+04  
%3.3e     |1.429e+04           |1.429e+04           
%13.3e    |    1.429e+04       |    1.429e+04       
%-13.3e$  |1.429e+04    $      |1.429e+04    $      
%013.3e   |00001.429e+04       |00001.429e+04       
%1f       |0.000000            |0.000000            
%10f      |  0.000000          |  0.000000          
%.f       |0.000000            |0                   
%.0f      |0                   |0                   
%.1f      |0.0                 |0.0                 
%.6f      |0.000000            |0.000000            
%.10f     |0.0000000000        |0.0000000000        
%.12f     |0.000000000000      |0.000000000000      
%3.3f     |0.000               |0.000               
%13.3f    |        0.000       |        0.000       
%-13.3f$  |0.000        $      |0.000        $      
%013.3f   |000000000.000       |000000000.000       
%1f       |14285.714286        |14285.714286        
%10f      |14285.714286        |14285.714286        
%.f       |14285.714286        |14285.7142857142857143
%.0f      |14286               |14286               
%.1f      |14285.7             |14285.7             
%.6f      |14285.714286        |14285.714286        
%.10f     |14285.7142857143    |14285.7142857143    
%.12f     |14285.714285714286  |14285.714285714286  
%3.3f     |14285.714           |14285.714           
%13.3f    |    14285.714       |    14285.714       
%-13.3f$  |14285.714    $      |14285.714    $      
%013.3f   |000014285.714       |000014285.714       
%1g       |0                   |0                   
%10g      |         0          |         0          
%.g       |0                   |0                   
%.0g      |0                   |0                   
%.1g      |0                   |0                   
%.6g      |0                   |0                   
%.10g     |0                   |0                   
%.12g     |0                   |0                   
%3.3g     |  0                 |  0                 
%13.3g    |            0       |            0       
%-13.3g$  |0            $      |0            $      
%013.3g   |0000000000000       |0000000000000       
%1g       |14285.7             |14285.7             
%10g      |   14285.7          |   14285.7          
%.g       |14285.7             |14285.7142857142857143
%.0g      |1e+04               |1e+04               
%.1g      |1e+04               |1e+04               
%.6g      |14285.7             |14285.7             
%.10g     |14285.71429         |14285.71429         
%.12g     |14285.7142857       |14285.7142857       
%3.3g     |1.43e+04            |1.43e+04            
%13.3g    |     1.43e+04       |     1.43e+04       
%-13.3g$  |1.43e+04     $      |1.43e+04     $      
%013.3g   |000001.43e+04       |000001.43e+04       

======== #11 Formatter test - big numbers ========

%d        |12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%10d      |12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%100d     |12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%200d     |12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%201d     | 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%210d     |          12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
%-210d$   |12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890          $
%0210d    |000000000012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

======== #12 sequence ========

format('%d', 1L .. 10L).join(',') .. 1,2,3,4,5,6,7,8,9,10
format('%d', 10L .. 1L).join(',') .. 10,9,8,7,6,5,4,3,2,1
format('%d', (1L..).head(10)).join(',') .. 1,2,3,4,5,6,7,8,9,10
format('%d', 1000000000000000L .. 1000000000000010L).join(',') .. 1000000000000000,1000000000000001,1000000000000002,1000000000000003,1000000000000004,1000000000000005,1000000000000006,1000000000000007,1000000000000008,1000000000000009,1000000000000010
format('%d', (1000000000000000L..).head(10)).join(',') .. 1000000000000000,1000000000000001,1000000000000002,1000000000000003,1000000000000004,1000000000000005,1000000000000006,1000000000000007,1000000000000008,1000000000000009

======== #13 sort ========

0L,1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,13L,14L,15L,16L,17L,18L,19L,20L,21L,22L,23L,24L,25L,26L,27L,28L,29L,30L,31L,32L,33L,34L,35L,36L,37L,38L,39L,40L,41L,42L,43L,44L,45L,46L,47L,48L,49L,50L,51L,52L,53L,54L,55L,56L,57L,58L,59L,60L,61L,62L,63L,64L,65L,66L,67L,68L,69L,70L,71L,72L,73L,74L,75L,76L,77L,78L,79L,80L,81L,82L,83L,84L,85L,86L,87L,88L,89L,90L,91L,92L,93L,94L,95L,96L,97L,98L,99L
99L,98L,97L,96L,95L,94L,93L,92L,91L,90L,89L,88L,87L,86L,85L,84L,83L,82L,81L,80L,79L,78L,77L,76L,75L,74L,73L,72L,71L,70L,69L,68L,67L,66L,65L,64L,63L,62L,61L,60L,59L,58L,57L,56L,55L,54L,53L,52L,51L,50L,49L,48L,47L,46L,45L,44L,43L,42L,41L,40L,39L,38L,37L,36L,35L,34L,33L,32L,31L,30L,29L,28L,27L,26L,25L,24L,23L,22L,21L,20L,19L,18L,17L,16L,15L,14L,13L,12L,11L,10L,9L,8L,7L,6L,5L,4L,3L,2L,1L,0L
0.L,1.L,2.L,3.L,4.L,5.L,6.L,7.L,8.L,9.L,10.L,11.L,12.L,13.L,14.L,15.L,16.L,17.L,18.L,19.L,20.L,21.L,22.L,23.L,24.L,25.L,26.L,27.L,28.L,29.L,30.L,31.L,32.L,33.L,34.L,35.L,36.L,37.L,38.L,39.L,40.L,41.L,42.L,43.L,44.L,45.L,46.L,47.L,48.L,49.L,50.L,51.L,52.L,53.L,54.L,55.L,56.L,57.L,58.L,59.L,60.L,61.L,62.L,63.L,64.L,65.L,66.L,67.L,68.L,69.L,70.L,71.L,72.L,73.L,74.L,75.L,76.L,77.L,78.L,79.L,80.L,81.L,82.L,83.L,84.L,85.L,86.L,87.L,88.L,89.L,90.L,91.L,92.L,93.L,94.L,95.L,96.L,97.L,98.L,99.L
99.L,98.L,97.L,96.L,95.L,94.L,93.L,92.L,91.L,90.L,89.L,88.L,87.L,86.L,85.L,84.L,83.L,82.L,81.L,80.L,79.L,78.L,77.L,76.L,75.L,74.L,73.L,72.L,71.L,70.L,69.L,68.L,67.L,66.L,65.L,64.L,63.L,62.L,61.L,60.L,59.L,58.L,57.L,56.L,55.L,54.L,53.L,52.L,51.L,50.L,49.L,48.L,47.L,46.L,45.L,44.L,43.L,42.L,41.L,40.L,39.L,38.L,37.L,36.L,35.L,34.L,33.L,32.L,31.L,30.L,29.L,28.L,27.L,26.L,25.L,24.L,23.L,22.L,21.L,20.L,19.L,18.L,17.L,16.L,15.L,14.L,13.L,12.L,11.L,10.L,9.L,8.L,7.L,6.L,5.L,4.L,3.L,2.L,1.L,0.L
0Lr,1Lr,2Lr,3Lr,4Lr,5Lr,6Lr,7Lr,8Lr,9Lr,10Lr,11Lr,12Lr,13Lr,14Lr,15Lr,16Lr,17Lr,18Lr,19Lr,20Lr,21Lr,22Lr,23Lr,24Lr,25Lr,26Lr,27Lr,28Lr,29Lr,30Lr,31Lr,32Lr,33Lr,34Lr,35Lr,36Lr,37Lr,38Lr,39Lr,40Lr,41Lr,42Lr,43Lr,44Lr,45Lr,46Lr,47Lr,48Lr,49Lr,50Lr,51Lr,52Lr,53Lr,54Lr,55Lr,56Lr,57Lr,58Lr,59Lr,60Lr,61Lr,62Lr,63Lr,64Lr,65Lr,66Lr,67Lr,68Lr,69Lr,70Lr,71Lr,72Lr,73Lr,74Lr,75Lr,76Lr,77Lr,78Lr,79Lr,80Lr,81Lr,82Lr,83Lr,84Lr,85Lr,86Lr,87Lr,88Lr,89Lr,90Lr,91Lr,92Lr,93Lr,94Lr,95Lr,96Lr,97Lr,98Lr,99Lr
99Lr,98Lr,97Lr,96Lr,95Lr,94Lr,93Lr,92Lr,91Lr,90Lr,89Lr,88Lr,87Lr,86Lr,85Lr,84Lr,83Lr,82Lr,81Lr,80Lr,79Lr,78Lr,77Lr,76Lr,75Lr,74Lr,73Lr,72Lr,71Lr,70Lr,69Lr,68Lr,67Lr,66Lr,65Lr,64Lr,63Lr,62Lr,61Lr,60Lr,59Lr,58Lr,57Lr,56Lr,55Lr,54Lr,53Lr,52Lr,51Lr,50Lr,49Lr,48Lr,47Lr,46Lr,45Lr,44Lr,43Lr,42Lr,41Lr,40Lr,39Lr,38Lr,37Lr,36Lr,35Lr,34Lr,33Lr,32Lr,31Lr,30Lr,29Lr,28Lr,27Lr,26Lr,25Lr,24Lr,23Lr,22Lr,21Lr,20Lr,19Lr,18Lr,17Lr,16Lr,15Lr,14Lr,13Lr,12Lr,11Lr,10Lr,9Lr,8Lr,7Lr,6Lr,5Lr,4Lr,3Lr,2Lr,1Lr,0Lr

======== #14 square root ========

sqrt(   1) = 1.L
sqrt(   2) = 1.414213562373095048801688724209698078569L
sqrt(   3) = 1.732050807568877293527446341505872366942L
sqrt(   4) = 2.L
sqrt(   5) = 2.23606797749978969640917366873127623544L
sqrt(   6) = 2.449489742783178098197284074705891391964L
sqrt(   7) = 2.645751311064590590501615753639260425709L
sqrt(   8) = 2.828427124746190097603377448419396157138L
sqrt(   9) = 3.L
sqrt(  10) = 3.162277660168379331998893544432718533717L
sqrt(  1L) = 1.L
sqrt(  2L) = 1.414213562373095048801688724209698078569L
sqrt(  3L) = 1.732050807568877293527446341505872366942L
sqrt(  4L) = 2.L
sqrt(  5L) = 2.23606797749978969640917366873127623544L
sqrt(  6L) = 2.449489742783178098197284074705891391964L
sqrt(  7L) = 2.645751311064590590501615753639260425709L
sqrt(  8L) = 2.828427124746190097603377448419396157138L
sqrt(  9L) = 3.L
sqrt( 10L) = 3.162277660168379331998893544432718533717L
sqrt( 1.L) = 1.L
sqrt( 2.L) = 1.414213562373095048801688724209698078569L
sqrt( 3.L) = 1.732050807568877293527446341505872366942L
sqrt( 4.L) = 2.L
sqrt( 5.L) = 2.23606797749978969640917366873127623544L
sqrt( 6.L) = 2.449489742783178098197284074705891391964L
sqrt( 7.L) = 2.645751311064590590501615753639260425709L
sqrt( 8.L) = 2.828427124746190097603377448419396157138L
sqrt( 9.L) = 3.L
sqrt(10.L) = 3.162277660168379331998893544432718533717L
sqrt( 1Lr) = 1.L
sqrt( 2Lr) = 1.414213562373095048801688724209698078569L
sqrt( 3Lr) = 1.732050807568877293527446341505872366942L
sqrt( 4Lr) = 2.L
sqrt( 5Lr) = 2.23606797749978969640917366873127623544L
sqrt( 6Lr) = 2.449489742783178098197284074705891391964L
sqrt( 7Lr) = 2.645751311064590590501615753639260425709L
sqrt( 8Lr) = 2.828427124746190097603377448419396157138L
sqrt( 9Lr) = 3.L
sqrt(10Lr) = 3.162277660168379331998893544432718533717L

======== #15 type cast ========

gmp.mpz(3) .. 3L
gmp.mpz(3L) .. 3L
gmp.mpz(3.L) .. 3L
gmp.mpf(3) .. 3.L
gmp.mpf(3L) .. 3.L
gmp.mpf(3.L) .. 3.L
gmp.mpf(3Lr) .. 3.L
gmp.mpf(3Lr / 2) .. 1.5L
gmp.mpf(2Lr / 3) .. 0.666666666666666666667L
gmp.mpq(3) .. 3Lr
1Lr.cast@mpf() .. 1.L
(3Lr / 2).cast@mpf() .. 1.5L
(2Lr / 3).cast@mpf() .. 0.666666666666666666667L
