# New Ticket Created by  Zoffix Znet 
# Please include the string:  [perl #130786]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=130786 >


The Failure has DESTROY submethod[^1] with a comment above it saying "Shouldn't 
happen". But I did manage to make it happen,
but only on a 32-bit box. I have both 64-bit and 32-bit boxes with 
2017.01-121-gf94cb21 on them and the warning
happens only on the 32-bit box.

Attached are the program and the output it generated. The warnings appear 
around test 100.

[1] 
https://github.com/rakudo/rakudo/blob/b51a5505a6b766e6be1861f4f6d08a0986b1a7ac/src/core/Failure.pm#L34-L35
$ perl6 foo.p6 
    ok 1 -   3..4   ~~ -1/0..1/0
    ok 2 - 0/0..0/0 ~~ -1/0..1/0
    ok 3 - 2..3 ~~ 2..3
    ok 4 - "2".."3" ~~ 2..3
    ok 5 - 2.0..3.0 ~~ 2..3
    ok 6 - 2..3 ~~ 2..3
    ok 7 - 2.5..2.8 ~~ 2..3
    ok 8 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2..3
    ok 9 - 2..FatRat.new(3, 1) ~~ 2..3
    ok 10 - 2e0..FatRat.new(3, 1) ~~ 2..3
    ok 11 - 2.5..FatRat.new(3, 1) ~~ 2..3
    ok 12 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2..3
    ok 13 - 1..3 ~~ 2..3
    ok 14 - "2".."4" ~~ 2..3
    ok 15 - -2..5.0 ~~ 2..3
    ok 16 - -10..10 ~~ 2..3
    ok 17 - 2.5..6.5 ~~ 2..3
    ok 18 - 1^..3 ~~ 2..3
    ok 19 - "2"..^"4" ~~ 2..3
    ok 20 - "1"^..^3 ~~ 2..3
    ok 21 - <0/0>..<0/0> ~~ 2..3
    ok 22 - FatRat.new(3, 1)..10 ~~ 2..3
    ok 23 - -2e0..FatRat.new(2, 1) ~~ 2..3
    ok 24 - 2..3 ~~ 2..3e0
    ok 25 - "2".."3" ~~ 2..3e0
    ok 26 - 2.0..3.0 ~~ 2..3e0
    ok 27 - 2..3 ~~ 2..3e0
    ok 28 - 2.5..2.8 ~~ 2..3e0
    ok 29 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2..3e0
    ok 30 - 2..FatRat.new(3, 1) ~~ 2..3e0
    ok 31 - 2e0..FatRat.new(3, 1) ~~ 2..3e0
    ok 32 - 2.5..FatRat.new(3, 1) ~~ 2..3e0
    ok 33 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2..3e0
    ok 34 - 1..3 ~~ 2..3e0
    ok 35 - "2".."4" ~~ 2..3e0
    ok 36 - -2..5.0 ~~ 2..3e0
    ok 37 - -10..10 ~~ 2..3e0
    ok 38 - 2.5..6.5 ~~ 2..3e0
    ok 39 - 1^..3 ~~ 2..3e0
    ok 40 - "2"..^"4" ~~ 2..3e0
    ok 41 - "1"^..^3 ~~ 2..3e0
    ok 42 - <0/0>..<0/0> ~~ 2..3e0
    ok 43 - FatRat.new(3, 1)..10 ~~ 2..3e0
    ok 44 - -2e0..FatRat.new(2, 1) ~~ 2..3e0
    ok 45 - 2..3 ~~ 2..3.0
    ok 46 - "2".."3" ~~ 2..3.0
    ok 47 - 2.0..3.0 ~~ 2..3.0
    ok 48 - 2..3 ~~ 2..3.0
    ok 49 - 2.5..2.8 ~~ 2..3.0
    ok 50 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2..3.0
    ok 51 - 2..FatRat.new(3, 1) ~~ 2..3.0
    ok 52 - 2e0..FatRat.new(3, 1) ~~ 2..3.0
    ok 53 - 2.5..FatRat.new(3, 1) ~~ 2..3.0
    ok 54 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2..3.0
    ok 55 - 1..3 ~~ 2..3.0
    ok 56 - "2".."4" ~~ 2..3.0
    ok 57 - -2..5.0 ~~ 2..3.0
    ok 58 - -10..10 ~~ 2..3.0
    ok 59 - 2.5..6.5 ~~ 2..3.0
    ok 60 - 1^..3 ~~ 2..3.0
    ok 61 - "2"..^"4" ~~ 2..3.0
    ok 62 - "1"^..^3 ~~ 2..3.0
    ok 63 - <0/0>..<0/0> ~~ 2..3.0
    ok 64 - FatRat.new(3, 1)..10 ~~ 2..3.0
    ok 65 - -2e0..FatRat.new(2, 1) ~~ 2..3.0
    ok 66 - 2..3 ~~ 2..FatRat.new(3, 1)
    ok 67 - "2".."3" ~~ 2..FatRat.new(3, 1)
    ok 68 - 2.0..3.0 ~~ 2..FatRat.new(3, 1)
    ok 69 - 2..3 ~~ 2..FatRat.new(3, 1)
    ok 70 - 2.5..2.8 ~~ 2..FatRat.new(3, 1)
    ok 71 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2..FatRat.new(3, 1)
    ok 72 - 2..FatRat.new(3, 1) ~~ 2..FatRat.new(3, 1)
    ok 73 - 2e0..FatRat.new(3, 1) ~~ 2..FatRat.new(3, 1)
    ok 74 - 2.5..FatRat.new(3, 1) ~~ 2..FatRat.new(3, 1)
    ok 75 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2..FatRat.new(3, 1)
    ok 76 - 1..3 ~~ 2..FatRat.new(3, 1)
    ok 77 - "2".."4" ~~ 2..FatRat.new(3, 1)
    ok 78 - -2..5.0 ~~ 2..FatRat.new(3, 1)
    ok 79 - -10..10 ~~ 2..FatRat.new(3, 1)
    ok 80 - 2.5..6.5 ~~ 2..FatRat.new(3, 1)
    ok 81 - 1^..3 ~~ 2..FatRat.new(3, 1)
    ok 82 - "2"..^"4" ~~ 2..FatRat.new(3, 1)
    ok 83 - "1"^..^3 ~~ 2..FatRat.new(3, 1)
    ok 84 - <0/0>..<0/0> ~~ 2..FatRat.new(3, 1)
    ok 85 - FatRat.new(3, 1)..10 ~~ 2..FatRat.new(3, 1)
    ok 86 - -2e0..FatRat.new(2, 1) ~~ 2..FatRat.new(3, 1)
    ok 87 - 2..3 ~~ 2e0..3
    ok 88 - "2".."3" ~~ 2e0..3
    ok 89 - 2.0..3.0 ~~ 2e0..3
    ok 90 - 2..3 ~~ 2e0..3
    ok 91 - 2.5..2.8 ~~ 2e0..3
    ok 92 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2e0..3
    ok 93 - 2..FatRat.new(3, 1) ~~ 2e0..3
    ok 94 - 2e0..FatRat.new(3, 1) ~~ 2e0..3
    ok 95 - 2.5..FatRat.new(3, 1) ~~ 2e0..3
    ok 96 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2e0..3
    ok 97 - 1..3 ~~ 2e0..3
    ok 98 - "2".."4" ~~ 2e0..3
    ok 99 - -2..5.0 ~~ 2e0..3
    ok 100 - -10..10 ~~ 2e0..3
    ok 101 - 2.5..6.5 ~~ 2e0..3
    ok 102 - 1^..3 ~~ 2e0..3
    ok 103 - "2"..^"4" ~~ 2e0..3
    ok 104 - "1"^..^3 ~~ 2e0..3
    ok 105 - <0/0>..<0/0> ~~ 2e0..3
    ok 106 - FatRat.new(3, 1)..10 ~~ 2e0..3
    ok 107 - -2e0..FatRat.new(2, 1) ~~ 2e0..3
    ok 108 - 2..3 ~~ 2e0..3e0
    ok 109 - "2".."3" ~~ 2e0..3e0
    ok 110 - 2.0..3.0 ~~ 2e0..3e0
    ok 111 - 2..3 ~~ 2e0..3e0
    ok 112 - 2.5..2.8 ~~ 2e0..3e0
    ok 113 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2e0..3e0
    ok 114 - 2..FatRat.new(3, 1) ~~ 2e0..3e0
    ok 115 - 2e0..FatRat.new(3, 1) ~~ 2e0..3e0
    ok 116 - 2.5..FatRat.new(3, 1) ~~ 2e0..3e0
    ok 117 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2e0..3e0
    ok 118 - 1..3 ~~ 2e0..3e0
    ok 119 - "2".."4" ~~ 2e0..3e0
    ok 120 - -2..5.0 ~~ 2e0..3e0
    ok 121 - -10..10 ~~ 2e0..3e0
    ok 122 - 2.5..6.5 ~~ 2e0..3e0
    ok 123 - 1^..3 ~~ 2e0..3e0
    ok 124 - "2"..^"4" ~~ 2e0..3e0
    ok 125 - "1"^..^3 ~~ 2e0..3e0
    ok 126 - <0/0>..<0/0> ~~ 2e0..3e0
    ok 127 - FatRat.new(3, 1)..10 ~~ 2e0..3e0
    ok 128 - -2e0..FatRat.new(2, 1) ~~ 2e0..3e0
    ok 129 - 2..3 ~~ 2e0..3.0
    ok 130 - "2".."3" ~~ 2e0..3.0
    ok 131 - 2.0..3.0 ~~ 2e0..3.0
    ok 132 - 2..3 ~~ 2e0..3.0
    ok 133 - 2.5..2.8 ~~ 2e0..3.0
    ok 134 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2e0..3.0
    ok 135 - 2..FatRat.new(3, 1) ~~ 2e0..3.0
    ok 136 - 2e0..FatRat.new(3, 1) ~~ 2e0..3.0
    ok 137 - 2.5..FatRat.new(3, 1) ~~ 2e0..3.0
    ok 138 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2e0..3.0
    ok 139 - 1..3 ~~ 2e0..3.0
    ok 140 - "2".."4" ~~ 2e0..3.0
    ok 141 - -2..5.0 ~~ 2e0..3.0
    ok 142 - -10..10 ~~ 2e0..3.0
    ok 143 - 2.5..6.5 ~~ 2e0..3.0
    ok 144 - 1^..3 ~~ 2e0..3.0
    ok 145 - "2"..^"4" ~~ 2e0..3.0
    ok 146 - "1"^..^3 ~~ 2e0..3.0
    ok 147 - <0/0>..<0/0> ~~ 2e0..3.0
    ok 148 - FatRat.new(3, 1)..10 ~~ 2e0..3.0
    ok 149 - -2e0..FatRat.new(2, 1) ~~ 2e0..3.0
    ok 150 - 2..3 ~~ 2e0..FatRat.new(3, 1)
    ok 151 - "2".."3" ~~ 2e0..FatRat.new(3, 1)
    ok 152 - 2.0..3.0 ~~ 2e0..FatRat.new(3, 1)
    ok 153 - 2..3 ~~ 2e0..FatRat.new(3, 1)
    ok 154 - 2.5..2.8 ~~ 2e0..FatRat.new(3, 1)
    ok 155 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 156 - 2..FatRat.new(3, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 157 - 2e0..FatRat.new(3, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 158 - 2.5..FatRat.new(3, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 159 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 160 - 1..3 ~~ 2e0..FatRat.new(3, 1)
    ok 161 - "2".."4" ~~ 2e0..FatRat.new(3, 1)
    ok 162 - -2..5.0 ~~ 2e0..FatRat.new(3, 1)
    ok 163 - -10..10 ~~ 2e0..FatRat.new(3, 1)
    ok 164 - 2.5..6.5 ~~ 2e0..FatRat.new(3, 1)
    ok 165 - 1^..3 ~~ 2e0..FatRat.new(3, 1)
    ok 166 - "2"..^"4" ~~ 2e0..FatRat.new(3, 1)
    ok 167 - "1"^..^3 ~~ 2e0..FatRat.new(3, 1)
    ok 168 - <0/0>..<0/0> ~~ 2e0..FatRat.new(3, 1)
    ok 169 - FatRat.new(3, 1)..10 ~~ 2e0..FatRat.new(3, 1)
    ok 170 - -2e0..FatRat.new(2, 1) ~~ 2e0..FatRat.new(3, 1)
    ok 171 - 2..3 ~~ 2.0..3
    ok 172 - "2".."3" ~~ 2.0..3
    ok 173 - 2.0..3.0 ~~ 2.0..3
    ok 174 - 2..3 ~~ 2.0..3
    ok 175 - 2.5..2.8 ~~ 2.0..3
    ok 176 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2.0..3
    ok 177 - 2..FatRat.new(3, 1) ~~ 2.0..3
    ok 178 - 2e0..FatRat.new(3, 1) ~~ 2.0..3
    ok 179 - 2.5..FatRat.new(3, 1) ~~ 2.0..3
    ok 180 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2.0..3
    ok 181 - 1..3 ~~ 2.0..3
    ok 182 - "2".."4" ~~ 2.0..3
    ok 183 - -2..5.0 ~~ 2.0..3
    ok 184 - -10..10 ~~ 2.0..3
    ok 185 - 2.5..6.5 ~~ 2.0..3
    ok 186 - 1^..3 ~~ 2.0..3
    ok 187 - "2"..^"4" ~~ 2.0..3
    ok 188 - "1"^..^3 ~~ 2.0..3
    ok 189 - <0/0>..<0/0> ~~ 2.0..3
    ok 190 - FatRat.new(3, 1)..10 ~~ 2.0..3
    ok 191 - -2e0..FatRat.new(2, 1) ~~ 2.0..3
    ok 192 - 2..3 ~~ 2.0..3e0
    ok 193 - "2".."3" ~~ 2.0..3e0
    ok 194 - 2.0..3.0 ~~ 2.0..3e0
    ok 195 - 2..3 ~~ 2.0..3e0
    ok 196 - 2.5..2.8 ~~ 2.0..3e0
    ok 197 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2.0..3e0
    ok 198 - 2..FatRat.new(3, 1) ~~ 2.0..3e0
    ok 199 - 2e0..FatRat.new(3, 1) ~~ 2.0..3e0
    ok 200 - 2.5..FatRat.new(3, 1) ~~ 2.0..3e0
    ok 201 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2.0..3e0
    ok 202 - 1..3 ~~ 2.0..3e0
    ok 203 - "2".."4" ~~ 2.0..3e0
    ok 204 - -2..5.0 ~~ 2.0..3e0
    ok 205 - -10..10 ~~ 2.0..3e0
    ok 206 - 2.5..6.5 ~~ 2.0..3e0
    ok 207 - 1^..3 ~~ 2.0..3e0
    ok 208 - "2"..^"4" ~~ 2.0..3e0
    ok 209 - "1"^..^3 ~~ 2.0..3e0
    ok 210 - <0/0>..<0/0> ~~ 2.0..3e0
    ok 211 - FatRat.new(3, 1)..10 ~~ 2.0..3e0
    ok 212 - -2e0..FatRat.new(2, 1) ~~ 2.0..3e0
    ok 213 - 2..3 ~~ 2.0..3.0
    ok 214 - "2".."3" ~~ 2.0..3.0
    ok 215 - 2.0..3.0 ~~ 2.0..3.0
    ok 216 - 2..3 ~~ 2.0..3.0
    ok 217 - 2.5..2.8 ~~ 2.0..3.0
    ok 218 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2.0..3.0
    ok 219 - 2..FatRat.new(3, 1) ~~ 2.0..3.0
    ok 220 - 2e0..FatRat.new(3, 1) ~~ 2.0..3.0
    ok 221 - 2.5..FatRat.new(3, 1) ~~ 2.0..3.0
    ok 222 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2.0..3.0
    ok 223 - 1..3 ~~ 2.0..3.0
    ok 224 - "2".."4" ~~ 2.0..3.0
    ok 225 - -2..5.0 ~~ 2.0..3.0
    ok 226 - -10..10 ~~ 2.0..3.0
    ok 227 - 2.5..6.5 ~~ 2.0..3.0
    ok 228 - 1^..3 ~~ 2.0..3.0
    ok 229 - "2"..^"4" ~~ 2.0..3.0
    ok 230 - "1"^..^3 ~~ 2.0..3.0
    ok 231 - <0/0>..<0/0> ~~ 2.0..3.0
    ok 232 - FatRat.new(3, 1)..10 ~~ 2.0..3.0
    ok 233 - -2e0..FatRat.new(2, 1) ~~ 2.0..3.0
    ok 234 - 2..3 ~~ 2.0..FatRat.new(3, 1)
    ok 235 - "2".."3" ~~ 2.0..FatRat.new(3, 1)
    ok 236 - 2.0..3.0 ~~ 2.0..FatRat.new(3, 1)
    ok 237 - 2..3 ~~ 2.0..FatRat.new(3, 1)
    ok 238 - 2.5..2.8 ~~ 2.0..FatRat.new(3, 1)
    ok 239 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 240 - 2..FatRat.new(3, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 241 - 2e0..FatRat.new(3, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 242 - 2.5..FatRat.new(3, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 243 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 244 - 1..3 ~~ 2.0..FatRat.new(3, 1)
    ok 245 - "2".."4" ~~ 2.0..FatRat.new(3, 1)
    ok 246 - -2..5.0 ~~ 2.0..FatRat.new(3, 1)
    ok 247 - -10..10 ~~ 2.0..FatRat.new(3, 1)
    ok 248 - 2.5..6.5 ~~ 2.0..FatRat.new(3, 1)
    ok 249 - 1^..3 ~~ 2.0..FatRat.new(3, 1)
    ok 250 - "2"..^"4" ~~ 2.0..FatRat.new(3, 1)
    ok 251 - "1"^..^3 ~~ 2.0..FatRat.new(3, 1)
    ok 252 - <0/0>..<0/0> ~~ 2.0..FatRat.new(3, 1)
    ok 253 - FatRat.new(3, 1)..10 ~~ 2.0..FatRat.new(3, 1)
    ok 254 - -2e0..FatRat.new(2, 1) ~~ 2.0..FatRat.new(3, 1)
    ok 255 - 2..3 ~~ FatRat.new(2, 1)..3
    ok 256 - "2".."3" ~~ FatRat.new(2, 1)..3
    ok 257 - 2.0..3.0 ~~ FatRat.new(2, 1)..3
    ok 258 - 2..3 ~~ FatRat.new(2, 1)..3
    ok 259 - 2.5..2.8 ~~ FatRat.new(2, 1)..3
    ok 260 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..3
    ok 261 - 2..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..3
    ok 262 - 2e0..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..3
    ok 263 - 2.5..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..3
    ok 264 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..3
    ok 265 - 1..3 ~~ FatRat.new(2, 1)..3
    ok 266 - "2".."4" ~~ FatRat.new(2, 1)..3
    ok 267 - -2..5.0 ~~ FatRat.new(2, 1)..3
    ok 268 - -10..10 ~~ FatRat.new(2, 1)..3
    ok 269 - 2.5..6.5 ~~ FatRat.new(2, 1)..3
    ok 270 - 1^..3 ~~ FatRat.new(2, 1)..3
    ok 271 - "2"..^"4" ~~ FatRat.new(2, 1)..3
    ok 272 - "1"^..^3 ~~ FatRat.new(2, 1)..3
    ok 273 - <0/0>..<0/0> ~~ FatRat.new(2, 1)..3
    ok 274 - FatRat.new(3, 1)..10 ~~ FatRat.new(2, 1)..3
    ok 275 - -2e0..FatRat.new(2, 1) ~~ FatRat.new(2, 1)..3
    ok 276 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 277 - "2".."3" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 278 - 2.0..3.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 279 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 280 - 2.5..2.8 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 281 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 282 - 2..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 283 - 2e0..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 284 - 2.5..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 285 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 286 - 1..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 287 - "2".."4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 288 - -2..5.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 289 - -10..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 290 - 2.5..6.5 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 291 - 1^..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 292 - "2"..^"4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 293 - "1"^..^3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 294 - <0/0>..<0/0> ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 295 - FatRat.new(3, 1)..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 296 - -2e0..FatRat.new(2, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 297 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 298 - "2".."3" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 299 - 2.0..3.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 300 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 301 - 2.5..2.8 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 302 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 303 - 2..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 304 - 2e0..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 305 - 2.5..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 306 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 307 - 1..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 308 - "2".."4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 309 - -2..5.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 310 - -10..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 311 - 2.5..6.5 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 312 - 1^..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 313 - "2"..^"4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 314 - "1"^..^3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 315 - <0/0>..<0/0> ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 316 - FatRat.new(3, 1)..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 317 - -2e0..FatRat.new(2, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 318 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 319 - "2".."3" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 320 - 2.0..3.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 321 - 2..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 322 - 2.5..2.8 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 323 - FatRat.new(2, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 324 - 2..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 325 - 2e0..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 326 - 2.5..FatRat.new(3, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 327 - FatRat.new(3, 1)..FatRat.new(3, 1) ~~ FatRat.new(2, 
1)..FatRat.new(3, 1)
    ok 328 - 1..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 329 - "2".."4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 330 - -2..5.0 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 331 - -10..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 332 - 2.5..6.5 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 333 - 1^..3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 334 - "2"..^"4" ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 335 - "1"^..^3 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 336 - <0/0>..<0/0> ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 337 - FatRat.new(3, 1)..10 ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    ok 338 - -2e0..FatRat.new(2, 1) ~~ FatRat.new(2, 1)..FatRat.new(3, 1)
    1..338
ok 1 - smartmatch against numeric range
    1..8
    # Looks like you planned 8 tests, but ran 0
not ok 2 - smartmatch of string ranges

# Failed test 'smartmatch of string ranges'
# at foo.p6 line 23
    not ok 1 - 0..10 ~~ "0"..3

    # Failed test '0..10 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 2 - 0..FatRat.new(10, 1) ~~ "0"..3

    # Failed test '0..FatRat.new(10, 1) ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 3 - 0..10e0 ~~ "0"..3

    # Failed test '0..10e0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 4 - 0..10.0 ~~ "0"..3

    # Failed test '0..10.0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 5 - 0..10.0 ~~ "0"..3

    # Failed test '0..10.0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 6 - 0e0..10 ~~ "0"..3

    # Failed test '0e0..10 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 7 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 8 - 0.0..10e0 ~~ "0"..3

    # Failed test '0.0..10e0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 9 - 0e0..10.0 ~~ "0"..3

    # Failed test '0e0..10.0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 10 - 0e0..10.0 ~~ "0"..3

    # Failed test '0e0..10.0 ~~ "0"..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 11 - 0..30 ~~ "0"..3
    ok 12 - 0..FatRat.new(30, 1) ~~ "0"..3
    ok 13 - 0..30e0 ~~ "0"..3
    ok 14 - 0..30.0 ~~ "0"..3
    ok 15 - 0..30.0 ~~ "0"..3
    ok 16 - 0e0..30 ~~ "0"..3
    ok 17 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ "0"..3
    ok 18 - 0.0..30e0 ~~ "0"..3
    ok 19 - 0e0..30.0 ~~ "0"..3
    ok 20 - 0e0..30.0 ~~ "0"..3
    not ok 21 - 0..10 ~~ "0"..3.0

    # Failed test '0..10 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 22 - 0..FatRat.new(10, 1) ~~ "0"..3.0

    # Failed test '0..FatRat.new(10, 1) ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 23 - 0..10e0 ~~ "0"..3.0

    # Failed test '0..10e0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 24 - 0..10.0 ~~ "0"..3.0

    # Failed test '0..10.0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 25 - 0..10.0 ~~ "0"..3.0

    # Failed test '0..10.0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 26 - 0e0..10 ~~ "0"..3.0

    # Failed test '0e0..10 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 27 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3.0

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 28 - 0.0..10e0 ~~ "0"..3.0

    # Failed test '0.0..10e0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 29 - 0e0..10.0 ~~ "0"..3.0

    # Failed test '0e0..10.0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 30 - 0e0..10.0 ~~ "0"..3.0

    # Failed test '0e0..10.0 ~~ "0"..3.0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 31 - 0..30 ~~ "0"..3.0
    ok 32 - 0..FatRat.new(30, 1) ~~ "0"..3.0
    ok 33 - 0..30e0 ~~ "0"..3.0
    ok 34 - 0..30.0 ~~ "0"..3.0
    ok 35 - 0..30.0 ~~ "0"..3.0
    ok 36 - 0e0..30 ~~ "0"..3.0
    ok 37 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ "0"..3.0
    ok 38 - 0.0..30e0 ~~ "0"..3.0
    ok 39 - 0e0..30.0 ~~ "0"..3.0
    ok 40 - 0e0..30.0 ~~ "0"..3.0
    not ok 41 - 0..10 ~~ "0"..3e0

    # Failed test '0..10 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 42 - 0..FatRat.new(10, 1) ~~ "0"..3e0

    # Failed test '0..FatRat.new(10, 1) ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 43 - 0..10e0 ~~ "0"..3e0

    # Failed test '0..10e0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 44 - 0..10.0 ~~ "0"..3e0

    # Failed test '0..10.0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 45 - 0..10.0 ~~ "0"..3e0

    # Failed test '0..10.0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 46 - 0e0..10 ~~ "0"..3e0

    # Failed test '0e0..10 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 47 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3e0

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 48 - 0.0..10e0 ~~ "0"..3e0

    # Failed test '0.0..10e0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 49 - 0e0..10.0 ~~ "0"..3e0

    # Failed test '0e0..10.0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 50 - 0e0..10.0 ~~ "0"..3e0

    # Failed test '0e0..10.0 ~~ "0"..3e0'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 51 - 0..30 ~~ "0"..3e0
    ok 52 - 0..FatRat.new(30, 1) ~~ "0"..3e0
    ok 53 - 0..30e0 ~~ "0"..3e0
    ok 54 - 0..30.0 ~~ "0"..3e0
    ok 55 - 0..30.0 ~~ "0"..3e0
    ok 56 - 0e0..30 ~~ "0"..3e0
    ok 57 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ "0"..3e0
    ok 58 - 0.0..30e0 ~~ "0"..3e0
    ok 59 - 0e0..30.0 ~~ "0"..3e0
    ok 60 - 0e0..30.0 ~~ "0"..3e0
    not ok 61 - 0..10 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0..10 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 62 - 0..FatRat.new(10, 1) ~~ "0"..FatRat.new(3, 1)

    # Failed test '0..FatRat.new(10, 1) ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 63 - 0..10e0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0..10e0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 64 - 0..10.0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0..10.0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 65 - 0..10.0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0..10.0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 66 - 0e0..10 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0e0..10 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 67 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..FatRat.new(3, 1)

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 68 - 0.0..10e0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0.0..10e0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 69 - 0e0..10.0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0e0..10.0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 70 - 0e0..10.0 ~~ "0"..FatRat.new(3, 1)

    # Failed test '0e0..10.0 ~~ "0"..FatRat.new(3, 1)'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 71 - 0..30 ~~ "0"..FatRat.new(3, 1)
    ok 72 - 0..FatRat.new(30, 1) ~~ "0"..FatRat.new(3, 1)
    ok 73 - 0..30e0 ~~ "0"..FatRat.new(3, 1)
    ok 74 - 0..30.0 ~~ "0"..FatRat.new(3, 1)
    ok 75 - 0..30.0 ~~ "0"..FatRat.new(3, 1)
    ok 76 - 0e0..30 ~~ "0"..FatRat.new(3, 1)
    ok 77 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ "0"..FatRat.new(3, 1)
    ok 78 - 0.0..30e0 ~~ "0"..FatRat.new(3, 1)
    ok 79 - 0e0..30.0 ~~ "0"..FatRat.new(3, 1)
    ok 80 - 0e0..30.0 ~~ "0"..FatRat.new(3, 1)
    not ok 81 - 0..10 ~~ 0..3

    # Failed test '0..10 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 82 - 0..FatRat.new(10, 1) ~~ 0..3

    # Failed test '0..FatRat.new(10, 1) ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 83 - 0..10e0 ~~ 0..3

    # Failed test '0..10e0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 84 - 0..10.0 ~~ 0..3

    # Failed test '0..10.0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 85 - 0..10.0 ~~ 0..3

    # Failed test '0..10.0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 86 - 0e0..10 ~~ 0..3

    # Failed test '0e0..10 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 87 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0..3

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 88 - 0.0..10e0 ~~ 0..3

    # Failed test '0.0..10e0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 89 - 0e0..10.0 ~~ 0..3

    # Failed test '0e0..10.0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 90 - 0e0..10.0 ~~ 0..3

    # Failed test '0e0..10.0 ~~ 0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 91 - 0..30 ~~ 0..3
    ok 92 - 0..FatRat.new(30, 1) ~~ 0..3
    ok 93 - 0..30e0 ~~ 0..3
    ok 94 - 0..30.0 ~~ 0..3
    ok 95 - 0..30.0 ~~ 0..3
    ok 96 - 0e0..30 ~~ 0..3
    ok 97 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ 0..3
    ok 98 - 0.0..30e0 ~~ 0..3
    ok 99 - 0e0..30.0 ~~ 0..3
    ok 100 - 0e0..30.0 ~~ 0..3
    not ok 101 - 0..10 ~~ 0.0..3

    # Failed test '0..10 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 102 - 0..FatRat.new(10, 1) ~~ 0.0..3

    # Failed test '0..FatRat.new(10, 1) ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 103 - 0..10e0 ~~ 0.0..3

    # Failed test '0..10e0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 104 - 0..10.0 ~~ 0.0..3

    # Failed test '0..10.0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 105 - 0..10.0 ~~ 0.0..3

    # Failed test '0..10.0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 106 - 0e0..10 ~~ 0.0..3

    # Failed test '0e0..10 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 107 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0.0..3
WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏♥' (indicated by ⏏)
  in block  at foo.p6 line 34
  in block <unit> at foo.p6 line 33

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏b' (indicated by ⏏)
  in block  at foo.p6 line 34
  in block <unit> at foo.p6 line 33

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏a' (indicated by ⏏)
  in block  at foo.p6 line 34
  in block <unit> at foo.p6 line 33

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏♥0' (indicated by ⏏)
  in block  at foo.p6 line 31
  in block <unit> at foo.p6 line 30

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏♥' (indicated by ⏏)
  in block  at foo.p6 line 31
  in block <unit> at foo.p6 line 30

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏a' (indicated by ⏏)
  in block  at foo.p6 line 31
  in block <unit> at foo.p6 line 30

WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or 
'.' in '⏏b' (indicated by ⏏)
  in block  at foo.p6 line 31
  in block <unit> at foo.p6 line 30


    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 108 - 0.0..10e0 ~~ 0.0..3

    # Failed test '0.0..10e0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 109 - 0e0..10.0 ~~ 0.0..3

    # Failed test '0e0..10.0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 110 - 0e0..10.0 ~~ 0.0..3

    # Failed test '0e0..10.0 ~~ 0.0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 111 - 0..30 ~~ 0.0..3
    ok 112 - 0..FatRat.new(30, 1) ~~ 0.0..3
    ok 113 - 0..30e0 ~~ 0.0..3
    ok 114 - 0..30.0 ~~ 0.0..3
    ok 115 - 0..30.0 ~~ 0.0..3
    ok 116 - 0e0..30 ~~ 0.0..3
    ok 117 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ 0.0..3
    ok 118 - 0.0..30e0 ~~ 0.0..3
    ok 119 - 0e0..30.0 ~~ 0.0..3
    ok 120 - 0e0..30.0 ~~ 0.0..3
    not ok 121 - 0..10 ~~ 0e0..3

    # Failed test '0..10 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 122 - 0..FatRat.new(10, 1) ~~ 0e0..3

    # Failed test '0..FatRat.new(10, 1) ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 123 - 0..10e0 ~~ 0e0..3

    # Failed test '0..10e0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 124 - 0..10.0 ~~ 0e0..3

    # Failed test '0..10.0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 125 - 0..10.0 ~~ 0e0..3

    # Failed test '0..10.0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 126 - 0e0..10 ~~ 0e0..3

    # Failed test '0e0..10 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 127 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0e0..3

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 128 - 0.0..10e0 ~~ 0e0..3

    # Failed test '0.0..10e0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 129 - 0e0..10.0 ~~ 0e0..3

    # Failed test '0e0..10.0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 130 - 0e0..10.0 ~~ 0e0..3

    # Failed test '0e0..10.0 ~~ 0e0..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 131 - 0..30 ~~ 0e0..3
    ok 132 - 0..FatRat.new(30, 1) ~~ 0e0..3
    ok 133 - 0..30e0 ~~ 0e0..3
    ok 134 - 0..30.0 ~~ 0e0..3
    ok 135 - 0..30.0 ~~ 0e0..3
    ok 136 - 0e0..30 ~~ 0e0..3
    ok 137 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ 0e0..3
    ok 138 - 0.0..30e0 ~~ 0e0..3
    ok 139 - 0e0..30.0 ~~ 0e0..3
    ok 140 - 0e0..30.0 ~~ 0e0..3
    not ok 141 - 0..10 ~~ FatRat.new(0, 1)..3

    # Failed test '0..10 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 142 - 0..FatRat.new(10, 1) ~~ FatRat.new(0, 1)..3

    # Failed test '0..FatRat.new(10, 1) ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 143 - 0..10e0 ~~ FatRat.new(0, 1)..3

    # Failed test '0..10e0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 144 - 0..10.0 ~~ FatRat.new(0, 1)..3

    # Failed test '0..10.0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 145 - 0..10.0 ~~ FatRat.new(0, 1)..3

    # Failed test '0..10.0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 146 - 0e0..10 ~~ FatRat.new(0, 1)..3

    # Failed test '0e0..10 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 147 - FatRat.new(0, 1)..FatRat.new(10, 1) ~~ FatRat.new(0, 1)..3

    # Failed test 'FatRat.new(0, 1)..FatRat.new(10, 1) ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 148 - 0.0..10e0 ~~ FatRat.new(0, 1)..3

    # Failed test '0.0..10e0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 149 - 0e0..10.0 ~~ FatRat.new(0, 1)..3

    # Failed test '0e0..10.0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    not ok 150 - 0e0..10.0 ~~ FatRat.new(0, 1)..3

    # Failed test '0e0..10.0 ~~ FatRat.new(0, 1)..3'
    # at foo.p6 line 53
    # expected: Bool::True
    #      got: Bool::False
    ok 151 - 0..30 ~~ FatRat.new(0, 1)..3
    ok 152 - 0..FatRat.new(30, 1) ~~ FatRat.new(0, 1)..3
    ok 153 - 0..30e0 ~~ FatRat.new(0, 1)..3
    ok 154 - 0..30.0 ~~ FatRat.new(0, 1)..3
    ok 155 - 0..30.0 ~~ FatRat.new(0, 1)..3
    ok 156 - 0e0..30 ~~ FatRat.new(0, 1)..3
    ok 157 - FatRat.new(0, 1)..FatRat.new(30, 1) ~~ FatRat.new(0, 1)..3
    ok 158 - 0.0..30e0 ~~ FatRat.new(0, 1)..3
    ok 159 - 0e0..30.0 ~~ FatRat.new(0, 1)..3
    ok 160 - 0e0..30.0 ~~ FatRat.new(0, 1)..3
    1..160
    # Looks like you failed 80 tests of 160
not ok 3 - smartmatch numeric range against string range [numeric strings]

# Failed test 'smartmatch numeric range against string range [numeric strings]'
# at foo.p6 line 38
 
use Test;
subtest 'smartmatch against numeric range' => {
    constant fr2 = FatRat.new: 2, 1;
    constant fr3 = FatRat.new: 3, 1;
    constant @true  = 2..3,   '2'..'3', 2/1..3/1,   2..3,   2.5..2.8,
                    fr2..fr3,   2..fr3, 2e0..fr3, 2.5..fr3, fr3..fr3;
    constant @false = 1..3,   '2'..'4',  -2..5/1, -10..10,  2.5..6.5, 1^..3,
        '2'..^'4', '1'^..^3,  0/0..0/0, fr3..10, -2e0..fr2, 'a'..'z';
    constant @variants =     2..3,   2..3e0,   2..3.0,   2..fr3,
                           2e0..3, 2e0..3e0, 2e0..3.0, 2e0..fr3,
                           2.0..3, 2.0..3e0, 2.0..3.0, 2.0..fr3,
                           fr2..3, fr2..fr3, fr2..fr3, fr2..fr3;
    constant $plan = 2 + @variants * (@true + @false);
    is-deeply 3..4     ~~ -1/0..1/0, True,  '  3..4   ~~ -1/0..1/0';
    is-deeply 0/0..0/0 ~~ -1/0..1/0, False, '0/0..0/0 ~~ -1/0..1/0';

    for @variants -> $r {
        is-deeply $_ ~~ $r, True,  "{.perl} ~~ {$r.perl}" for @true;
        try is-deeply $_ ~~ $r, False, "{.perl} ~~ {$r.perl}" for @false;
    }
}

subtest 'smartmatch of string ranges' => {
    my @true  = ['a'..'z', 'b'..'c'], ['aa'..'bb',  'a'..'z' ],
                ['♥'..'♦', '♥'..'♦'], ['♥0'..'♦3', '♥0'..'♦3'];
    my @false = ['b'..'c', 'a'..'z'], ['aa'..'bb',  'b'..'z' ],
                ['♤'..'♦', '♥'..'♦'], ['♤0'..'♦3', '♥0'..'♦3'];
    plan @true + @false;

    for @true -> ($a, $b) {
        try is-deeply $a ~~ $b, True,  "{$a.perl} ~~ {$b.perl}";
    }
    for @false -> ($a, $b) {
        try is-deeply $a ~~ $b, False, "{$a.perl} ~~ {$b.perl}";
    }
}

subtest 'smartmatch numeric range against string range [numeric strings]' => {
    # Note: numeric `10` in tests below should be compared as a string by
    # the smartmatch against a string range, and so it *is* correct that
    # 0..10 ~~ '0'..'3' === True, since string '10' is before '3' and after '0'
    constant fr0  = FatRat.new:  0, 1; constant fr3  = FatRat.new:  3, 1;
    constant fr10 = FatRat.new: 10, 1; constant fr30 = FatRat.new: 30, 1;
    constant @true  = 0..10,   0..fr10,   0..10e0,   0..10.0,   0..10/1,
                    0e0..10, fr0..fr10, 0.0..10e0, 0e0..10.0, 0e0..10/1;
    constant @false = 0..30,   0..fr30,   0..30e0,   0..30.0,   0..30/1,
                    0e0..30, fr0..fr30, 0.0..30e0, 0e0..30.0, 0e0..30/1;
    constant @variants = '0'..3,   '0'..3.0, '0'..3e0, '0'..fr3,
                           0..'3', 0.0..'3', 0e0..'3', fr0..'3';
    constant $plan = @variants * (@true + @false);

    for @variants -> $r {
        is-deeply $_ ~~ $r, True,  "{.perl} ~~ {$r.perl}" for @true;
        is-deeply $_ ~~ $r, False, "{.perl} ~~ {$r.perl}" for @false;
    }
}

Reply via email to