github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/mkarray/range_test.go (about) 1 package mkarray 2 3 import ( 4 "testing" 5 6 _ "github.com/lmorg/murex/builtins/types/string" 7 "github.com/lmorg/murex/test" 8 ) 9 10 func TestRangeMonth(t *testing.T) { 11 tests := []test.MurexTest{ 12 { 13 Block: `a: [June..October]`, 14 Stdout: "^June\nJuly\nAugust\nSeptember\nOctober\n$", 15 }, 16 { 17 Block: `a: [June..January]`, 18 Stdout: "^June\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember\nJanuary\n$", 19 }, 20 { 21 Block: `a: [December..June]`, 22 Stdout: "^December\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\n$", 23 }, 24 { 25 Block: `a: [..June]`, 26 Stdout: "", 27 Stderr: "unable to auto-detect range in `..June`\n", 28 ExitNum: 1, 29 }, 30 { 31 Block: `a: [June..]`, 32 Stdout: "", 33 Stderr: "unable to auto-detect range in `June..`\n", 34 ExitNum: 1, 35 }, 36 // lowercase 37 { 38 Block: `a: [june..october]`, 39 Stdout: "^june\njuly\naugust\nseptember\noctober\n$", 40 }, 41 { 42 Block: `a: [june..january]`, 43 Stdout: "^june\njuly\naugust\nseptember\noctober\nnovember\ndecember\njanuary\n$", 44 }, 45 { 46 Block: `a: [december..june]`, 47 Stdout: "^december\njanuary\nfebruary\nmarch\napril\nmay\njune\n$", 48 }, 49 // uppercase 50 { 51 Block: `a: [JUNE..OCTOBER]`, 52 Stdout: "^JUNE\nJULY\nAUGUST\nSEPTEMBER\nOCTOBER\n$", 53 }, 54 { 55 Block: `a: [JUNE..JANUARY]`, 56 Stdout: "^JUNE\nJULY\nAUGUST\nSEPTEMBER\nOCTOBER\nNOVEMBER\nDECEMBER\nJANUARY\n$", 57 }, 58 { 59 Block: `a: [DECEMBER..JUNE]`, 60 Stdout: "^DECEMBER\nJANUARY\nFEBRUARY\nMARCH\nAPRIL\nMAY\nJUNE\n$", 61 }, 62 } 63 64 test.RunMurexTestsRx(tests, t) 65 } 66 67 func TestRange(t *testing.T) { 68 tests := []test.MurexTest{ 69 // single range 70 { 71 Block: `a: [00..03]`, 72 Stdout: "00\n01\n02\n03\n", 73 }, 74 { 75 Block: `a: [01,03]`, 76 Stdout: "01\n03\n", 77 }, 78 // multiple ranges 79 { 80 Block: `a: [01..02][01..02]`, 81 Stdout: "0101\n0102\n0201\n0202\n", 82 }, 83 { 84 Block: `a: [01,03][01..02]`, 85 Stdout: "0101\n0102\n0301\n0302\n", 86 }, 87 { 88 Block: `a: [01..02][01,03]`, 89 Stdout: "0101\n0103\n0201\n0203\n", 90 }, 91 { 92 Block: `a: [01,03][01,03]`, 93 Stdout: "0101\n0103\n0301\n0303\n", 94 }, 95 // multiple ranges with non-ranged data 96 { 97 Block: `a: .[01..02].[01..02].`, 98 Stdout: ".01.01.\n.01.02.\n.02.01.\n.02.02.\n", 99 }, 100 { 101 Block: `a: .[01,03].[01..02].`, 102 Stdout: ".01.01.\n.01.02.\n.03.01.\n.03.02.\n", 103 }, 104 { 105 Block: `a: .[01..02].[01,03].`, 106 Stdout: ".01.01.\n.01.03.\n.02.01.\n.02.03.\n", 107 }, 108 { 109 Block: `a: .[01,03].[01,03].`, 110 Stdout: ".01.01.\n.01.03.\n.03.01.\n.03.03.\n", 111 }, 112 } 113 114 test.RunMurexTests(tests, t) 115 } 116 117 func TestRangeDown(t *testing.T) { 118 tests := []test.MurexTest{ 119 { 120 Block: `a: [10..7]`, 121 Stdout: "10\n9\n8\n7\n", 122 }, 123 { 124 Block: `a: [10..07]`, 125 Stdout: "10\n09\n08\n07\n", 126 }, 127 { 128 Block: `a: [010..007]`, 129 Stdout: "010\n009\n008\n007\n", 130 }, 131 } 132 133 test.RunMurexTests(tests, t) 134 } 135 136 func TestRangeAlpha(t *testing.T) { 137 tests := []test.MurexTest{ 138 // up 139 { 140 Block: `a: [a..d]`, 141 Stdout: "a\nb\nc\nd\n", 142 }, 143 { 144 Block: `a: [A..D]`, 145 Stdout: "A\nB\nC\nD\n", 146 }, 147 // down 148 { 149 Block: `a: [d..a]`, 150 Stdout: "d\nc\nb\na\n", 151 }, 152 { 153 Block: `a: [D..A]`, 154 Stdout: "D\nC\nB\nA\n", 155 }, 156 } 157 158 test.RunMurexTests(tests, t) 159 } 160 161 func TestRangeSame(t *testing.T) { 162 tests := []test.MurexTest{ 163 { 164 Block: `a: [1..1]`, 165 Stdout: "1\n", 166 }, 167 { 168 Block: `a: [01..01]`, 169 Stdout: "01\n", 170 }, 171 { 172 Block: `a: [a..a]`, 173 Stdout: "a\n", 174 }, 175 { 176 Block: `a: [A..A]`, 177 Stdout: "A\n", 178 }, 179 { 180 Block: `a: [1..1x8]`, 181 Stdout: "1\n", 182 }, 183 { 184 Block: `a: [1..1x16]`, 185 Stdout: "1\n", 186 }, 187 { 188 Block: `a: [01..01x8]`, 189 Stdout: "01\n", 190 }, 191 { 192 Block: `a: [01..01x16]`, 193 Stdout: "01\n", 194 }, 195 } 196 197 test.RunMurexTests(tests, t) 198 } 199 200 func TestRangeAltNumberBase(t *testing.T) { 201 tests := []test.MurexTest{ 202 // up 203 { 204 Block: `a: [00..10x8]`, 205 Stdout: "00\n01\n02\n03\n04\n05\n06\n07\n10\n", 206 }, 207 { 208 Block: `a: [00..10x16]`, 209 Stdout: "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n0a\n0b\n0c\n0d\n0e\n0f\n10\n", 210 }, 211 // down 212 { 213 Block: `a: [10..00x8]`, 214 Stdout: "10\n7\n6\n5\n4\n3\n2\n1\n0\n", 215 }, 216 { 217 Block: `a: [010..0x8]`, 218 Stdout: "010\n007\n006\n005\n004\n003\n002\n001\n000\n", 219 }, 220 { 221 Block: `a: [10..00x16]`, 222 Stdout: "10\nf\ne\nd\nc\nb\na\n9\n8\n7\n6\n5\n4\n3\n2\n1\n0\n", 223 }, 224 { 225 Block: `a: [010..0x16]`, 226 Stdout: "010\n00f\n00e\n00d\n00c\n00b\n00a\n009\n008\n007\n006\n005\n004\n003\n002\n001\n000\n", 227 }, 228 } 229 230 test.RunMurexTests(tests, t) 231 } 232 233 func TestRangeDate(t *testing.T) { 234 tests := []test.MurexTest{ 235 { 236 Block: `a: [25-Jun-20..05-Jul-20]`, 237 Stdout: "25-Jun-20\n26-Jun-20\n27-Jun-20\n28-Jun-20\n29-Jun-20\n30-Jun-20\n01-Jul-20\n02-Jul-20\n03-Jul-20\n04-Jul-20\n05-Jul-20\n", 238 }, 239 { 240 Block: `a: [03 Jan 20..28 Dec 19]`, 241 Stdout: "03 Jan 20\n02 Jan 20\n01 Jan 20\n31 Dec 19\n30 Dec 19\n29 Dec 19\n28 Dec 19\n", 242 }, 243 { 244 Block: `a: [25/June/2020..05/July/2020]`, 245 Stdout: "25/June/2020\n26/June/2020\n27/June/2020\n28/June/2020\n29/June/2020\n30/June/2020\n01/July/2020\n02/July/2020\n03/July/2020\n04/July/2020\n05/July/2020\n", 246 }, 247 { 248 Block: `a: [03-January-2020..28-December-2019]`, 249 Stdout: "03-January-2020\n02-January-2020\n01-January-2020\n31-December-2019\n30-December-2019\n29-December-2019\n28-December-2019\n", 250 }, 251 // lowercase 252 { 253 Block: `a: [25-jun-20..05-jul-20]`, 254 Stdout: "25-jun-20\n26-jun-20\n27-jun-20\n28-jun-20\n29-jun-20\n30-jun-20\n01-jul-20\n02-jul-20\n03-jul-20\n04-jul-20\n05-jul-20\n", 255 }, 256 { 257 Block: `a: [03-jan-20..28-dec-19]`, 258 Stdout: "03-jan-20\n02-jan-20\n01-jan-20\n31-dec-19\n30-dec-19\n29-dec-19\n28-dec-19\n", 259 }, 260 { 261 Block: `a: [25-june-2020..05-july-2020]`, 262 Stdout: "25-june-2020\n26-june-2020\n27-june-2020\n28-june-2020\n29-june-2020\n30-june-2020\n01-july-2020\n02-july-2020\n03-july-2020\n04-july-2020\n05-july-2020\n", 263 }, 264 { 265 Block: `a: [03-january-2020..28-december-2019]`, 266 Stdout: "03-january-2020\n02-january-2020\n01-january-2020\n31-december-2019\n30-december-2019\n29-december-2019\n28-december-2019\n", 267 }, 268 // uppercase 269 { 270 Block: `a: [03-JAN-20..28-DEC-19]`, 271 Stdout: "03-JAN-20\n02-JAN-20\n01-JAN-20\n31-DEC-19\n30-DEC-19\n29-DEC-19\n28-DEC-19\n", 272 }, 273 } 274 275 test.RunMurexTests(tests, t) 276 } 277 278 func TestRangeDateFormats(t *testing.T) { 279 tests := []test.MurexTest{ 280 // dd mm yy 281 { 282 Block: `a: [01-jan-20..03-jan-20]`, 283 Stdout: "01-jan-20\n02-jan-20\n03-jan-20\n", 284 }, 285 { 286 Block: `a: [03-jan-20..01-jan-20]`, 287 Stdout: "03-jan-20\n02-jan-20\n01-jan-20\n", 288 }, 289 { 290 Block: `a: [01 jan 20..03 jan 20]`, 291 Stdout: "01 jan 20\n02 jan 20\n03 jan 20\n", 292 }, 293 { 294 Block: `a: [03 jan 20..01 jan 20]`, 295 Stdout: "03 jan 20\n02 jan 20\n01 jan 20\n", 296 }, 297 { 298 Block: `a: [01/jan/20..03/jan/20]`, 299 Stdout: "01/jan/20\n02/jan/20\n03/jan/20\n", 300 }, 301 { 302 Block: `a: [03/jan/20..01/jan/20]`, 303 Stdout: "03/jan/20\n02/jan/20\n01/jan/20\n", 304 }, 305 { 306 Block: `a: [01-january-20..03-january-20]`, 307 Stdout: "01-january-20\n02-january-20\n03-january-20\n", 308 }, 309 { 310 Block: `a: [03-january-20..01-january-20]`, 311 Stdout: "03-january-20\n02-january-20\n01-january-20\n", 312 }, 313 { 314 Block: `a: [01 january 20..03 january 20]`, 315 Stdout: "01 january 20\n02 january 20\n03 january 20\n", 316 }, 317 { 318 Block: `a: [03 january 20..01 january 20]`, 319 Stdout: "03 january 20\n02 january 20\n01 january 20\n", 320 }, 321 { 322 Block: `a: [01/january/20..03/january/20]`, 323 Stdout: "01/january/20\n02/january/20\n03/january/20\n", 324 }, 325 { 326 Block: `a: [03/january/20..01/january/20]`, 327 Stdout: "03/january/20\n02/january/20\n01/january/20\n", 328 }, 329 330 // mm dd yy 331 332 { 333 Block: `a: [jan-01-20..jan-03-20]`, 334 Stdout: "jan-01-20\njan-02-20\njan-03-20\n", 335 }, 336 { 337 Block: `a: [jan-03-20..jan-01-20]`, 338 Stdout: "jan-03-20\njan-02-20\njan-01-20\n", 339 }, 340 { 341 Block: `a: [jan 01 20..jan 03 20]`, 342 Stdout: "jan 01 20\njan 02 20\njan 03 20\n", 343 }, 344 { 345 Block: `a: [jan 03 20..jan 01 20]`, 346 Stdout: "jan 03 20\njan 02 20\njan 01 20\n", 347 }, 348 { 349 Block: `a: [jan/01/20..jan/03/20]`, 350 Stdout: "jan/01/20\njan/02/20\njan/03/20\n", 351 }, 352 { 353 Block: `a: [jan/03/20..jan/01/20]`, 354 Stdout: "jan/03/20\njan/02/20\njan/01/20\n", 355 }, 356 { 357 Block: `a: [january-01-20..january-03-20]`, 358 Stdout: "january-01-20\njanuary-02-20\njanuary-03-20\n", 359 }, 360 { 361 Block: `a: [january-03-20..january-01-20]`, 362 Stdout: "january-03-20\njanuary-02-20\njanuary-01-20\n", 363 }, 364 { 365 Block: `a: [january 01 20..january 03 20]`, 366 Stdout: "january 01 20\njanuary 02 20\njanuary 03 20\n", 367 }, 368 { 369 Block: `a: [january 03 20..january 01 20]`, 370 Stdout: "january 03 20\njanuary 02 20\njanuary 01 20\n", 371 }, 372 { 373 Block: `a: [january/01/20..january/03/20]`, 374 Stdout: "january/01/20\njanuary/02/20\njanuary/03/20\n", 375 }, 376 { 377 Block: `a: [january/03/20..january/01/20]`, 378 Stdout: "january/03/20\njanuary/02/20\njanuary/01/20\n", 379 }, 380 381 // dd mm 382 383 { 384 Block: `a: [01-jan..03-jan]`, 385 Stdout: "01-jan\n02-jan\n03-jan\n", 386 }, 387 { 388 Block: `a: [03-jan..01-jan]`, 389 Stdout: "03-jan\n02-jan\n01-jan\n", 390 }, 391 { 392 Block: `a: [01 jan..03 jan]`, 393 Stdout: "01 jan\n02 jan\n03 jan\n", 394 }, 395 { 396 Block: `a: [03 jan..01 jan]`, 397 Stdout: "03 jan\n02 jan\n01 jan\n", 398 }, 399 { 400 Block: `a: [01/jan..03/jan]`, 401 Stdout: "01/jan\n02/jan\n03/jan\n", 402 }, 403 { 404 Block: `a: [03/jan..01/jan]`, 405 Stdout: "03/jan\n02/jan\n01/jan\n", 406 }, 407 { 408 Block: `a: [01-january..03-january]`, 409 Stdout: "01-january\n02-january\n03-january\n", 410 }, 411 { 412 Block: `a: [03-january..01-january]`, 413 Stdout: "03-january\n02-january\n01-january\n", 414 }, 415 { 416 Block: `a: [01 january..03 january]`, 417 Stdout: "01 january\n02 january\n03 january\n", 418 }, 419 { 420 Block: `a: [03 january..01 january]`, 421 Stdout: "03 january\n02 january\n01 january\n", 422 }, 423 { 424 Block: `a: [01/january..03/january]`, 425 Stdout: "01/january\n02/january\n03/january\n", 426 }, 427 { 428 Block: `a: [03/january..01/january]`, 429 Stdout: "03/january\n02/january\n01/january\n", 430 }, 431 } 432 433 test.RunMurexTests(tests, t) 434 }