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  }