github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/lists/mtac_test.go (about)

     1  package lists
     2  
     3  import (
     4  	"testing"
     5  
     6  	_ "github.com/lmorg/murex/builtins/types/json"
     7  	_ "github.com/lmorg/murex/builtins/types/string"
     8  	"github.com/lmorg/murex/lang/types"
     9  	"github.com/lmorg/murex/test"
    10  )
    11  
    12  type methodTest struct {
    13  	Stdin  string
    14  	Stdout string
    15  	Error  error
    16  }
    17  
    18  func TestMtacString(t *testing.T) {
    19  	tests := []methodTest{
    20  		{
    21  			Stdin:  "a\nb\nc\nd\ne\n",
    22  			Stdout: "e\nd\nc\nb\na\n",
    23  		},
    24  		{
    25  			Stdin:  "a\nb\nc\nd\ne",
    26  			Stdout: "e\nd\nc\nb\na\n",
    27  		},
    28  		{
    29  			Stdin:  "e\nd\nc\nb\na\n",
    30  			Stdout: "a\nb\nc\nd\ne\n",
    31  		},
    32  		{
    33  			Stdin:  "e\nd\nc\nb\na",
    34  			Stdout: "a\nb\nc\nd\ne\n",
    35  		},
    36  		{
    37  			Stdin:  "aaa\nbbb\nccc\nddd\neee\n",
    38  			Stdout: "eee\nddd\nccc\nbbb\naaa\n",
    39  		},
    40  		{
    41  			Stdin:  "aaa\nbbb\nccc\nddd\neee",
    42  			Stdout: "eee\nddd\nccc\nbbb\naaa\n",
    43  		},
    44  		{
    45  			Stdin:  "eee\nddd\nccc\nbbb\naaa\n",
    46  			Stdout: "aaa\nbbb\nccc\nddd\neee\n",
    47  		},
    48  		{
    49  			Stdin:  "eee\nddd\nccc\nbbb\naaa",
    50  			Stdout: "aaa\nbbb\nccc\nddd\neee\n",
    51  		},
    52  		{
    53  			Stdin:  "1\n2\n3\n4\n5\n",
    54  			Stdout: "5\n4\n3\n2\n1\n",
    55  		},
    56  		{
    57  			Stdin:  "1\n2\n3\n4\n5",
    58  			Stdout: "5\n4\n3\n2\n1\n",
    59  		},
    60  		{
    61  			Stdin:  "5\n4\n3\n2\n1\n",
    62  			Stdout: "1\n2\n3\n4\n5\n",
    63  		},
    64  		{
    65  			Stdin:  "5\n4\n3\n2\n1",
    66  			Stdout: "1\n2\n3\n4\n5\n",
    67  		},
    68  	}
    69  
    70  	for i := range tests {
    71  		test.RunMethodTest(t, cmdMtac, "mtac", tests[i].Stdin, types.String, []string{}, tests[i].Stdout, nil)
    72  	}
    73  }
    74  
    75  func TestMtacGeneric(t *testing.T) {
    76  	tests := []methodTest{
    77  		{
    78  			Stdin:  "a\nb\nc\nd\ne\n",
    79  			Stdout: "e\nd\nc\nb\na\n",
    80  		},
    81  		{
    82  			Stdin:  "a\nb\nc\nd\ne",
    83  			Stdout: "e\nd\nc\nb\na\n",
    84  		},
    85  		{
    86  			Stdin:  "e\nd\nc\nb\na\n",
    87  			Stdout: "a\nb\nc\nd\ne\n",
    88  		},
    89  		{
    90  			Stdin:  "e\nd\nc\nb\na",
    91  			Stdout: "a\nb\nc\nd\ne\n",
    92  		},
    93  		{
    94  			Stdin:  "aaa\nbbb\nccc\nddd\neee\n",
    95  			Stdout: "eee\nddd\nccc\nbbb\naaa\n",
    96  		},
    97  		{
    98  			Stdin:  "aaa\nbbb\nccc\nddd\neee",
    99  			Stdout: "eee\nddd\nccc\nbbb\naaa\n",
   100  		},
   101  		{
   102  			Stdin:  "eee\nddd\nccc\nbbb\naaa\n",
   103  			Stdout: "aaa\nbbb\nccc\nddd\neee\n",
   104  		},
   105  		{
   106  			Stdin:  "eee\nddd\nccc\nbbb\naaa",
   107  			Stdout: "aaa\nbbb\nccc\nddd\neee\n",
   108  		},
   109  		{
   110  			Stdin:  "1\n2\n3\n4\n5\n",
   111  			Stdout: "5\n4\n3\n2\n1\n",
   112  		},
   113  		{
   114  			Stdin:  "1\n2\n3\n4\n5",
   115  			Stdout: "5\n4\n3\n2\n1\n",
   116  		},
   117  		{
   118  			Stdin:  "5\n4\n3\n2\n1\n",
   119  			Stdout: "1\n2\n3\n4\n5\n",
   120  		},
   121  		{
   122  			Stdin:  "5\n4\n3\n2\n1",
   123  			Stdout: "1\n2\n3\n4\n5\n",
   124  		},
   125  	}
   126  
   127  	for i := range tests {
   128  		test.RunMethodTest(t, cmdMtac, "mtac", tests[i].Stdin, types.Generic, []string{}, tests[i].Stdout, nil)
   129  	}
   130  }
   131  
   132  func TestMtacJsonString(t *testing.T) {
   133  	tests := []methodTest{
   134  		{
   135  			Stdin:  `["a","b","c","d","e"]`,
   136  			Stdout: `["e","d","c","b","a"]`,
   137  		},
   138  		{
   139  			Stdin:  `["e","d","c","b","a"]`,
   140  			Stdout: `["a","b","c","d","e"]`,
   141  		},
   142  		{
   143  			Stdin:  `["aaa","bbb","ccc","ddd","eee"]`,
   144  			Stdout: `["eee","ddd","ccc","bbb","aaa"]`,
   145  		},
   146  		{
   147  			Stdin:  `["eee","ddd","ccc","bbb","aaa"]`,
   148  			Stdout: `["aaa","bbb","ccc","ddd","eee"]`,
   149  		},
   150  		{
   151  			Stdin:  `["1","2","3","4","5"]`,
   152  			Stdout: `["5","4","3","2","1"]`,
   153  		},
   154  		{
   155  			Stdin:  `["5","4","3","2","1"]`,
   156  			Stdout: `["1","2","3","4","5"]`,
   157  		},
   158  		{
   159  			Stdin:  `["111","222","333","444","555"]`,
   160  			Stdout: `["555","444","333","222","111"]`,
   161  		},
   162  		{
   163  			Stdin:  `["555","444","333","222","111"]`,
   164  			Stdout: `["111","222","333","444","555"]`,
   165  		},
   166  	}
   167  
   168  	for i := range tests {
   169  		test.RunMethodTest(t, cmdMtac, "mtac", tests[i].Stdin, types.Json, []string{}, tests[i].Stdout, nil)
   170  	}
   171  }
   172  
   173  func TestMtacJsonInt(t *testing.T) {
   174  	tests := []methodTest{
   175  		{
   176  			Stdin:  `[1,2,3,4,5]`,
   177  			Stdout: `[5,4,3,2,1]`,
   178  		},
   179  		{
   180  			Stdin:  `[5,4,3,2,1]`,
   181  			Stdout: `[1,2,3,4,5]`,
   182  		},
   183  		{
   184  			Stdin:  `[111,222,333,444,555]`,
   185  			Stdout: `[555,444,333,222,111]`,
   186  		},
   187  		{
   188  			Stdin:  `[555,444,333,222,111]`,
   189  			Stdout: `[111,222,333,444,555]`,
   190  		},
   191  	}
   192  
   193  	for i := range tests {
   194  		test.RunMethodTest(t, cmdMtac, "mtac", tests[i].Stdin, types.Json, []string{}, tests[i].Stdout, nil)
   195  	}
   196  }