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

     1  package structs_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/lmorg/murex/test"
     7  )
     8  
     9  func TestReturn(t *testing.T) {
    10  	tests := []test.MurexTest{
    11  		{
    12  			Block:  `out 0; return; out 2`,
    13  			Stdout: "0\n",
    14  		},
    15  		{
    16  			Block:  `out 1; return 0; out 2`,
    17  			Stdout: "1\n",
    18  		},
    19  		{
    20  			Block:   `out 2; return 3; out 2`,
    21  			Stdout:  "2\n",
    22  			ExitNum: 3,
    23  		},
    24  		{
    25  			Block: `
    26  				function TestReturn3 {
    27  					out 3
    28  					return 4
    29  					out 5
    30  				}
    31  				TestReturn3`,
    32  			Stdout:  "3\n",
    33  			ExitNum: 4,
    34  		},
    35  		{
    36  			Block: `
    37  				function TestReturn4 {
    38  					out 4
    39  					return 5
    40  					out 6
    41  				}
    42  				TestReturn4
    43  				exitnum`,
    44  			Stdout:  "4\n5\n",
    45  			ExitNum: 0,
    46  		},
    47  	}
    48  
    49  	test.RunMurexTests(tests, t)
    50  }
    51  
    52  func TestBreak(t *testing.T) {
    53  	tests := []test.MurexTest{
    54  		{
    55  			Block: `
    56  				function TestBreak0 {
    57  					out 3
    58  					break TestBreak0
    59  					out 5
    60  				}
    61  				TestBreak0`,
    62  			Stdout:  "3\n",
    63  			ExitNum: 0,
    64  		},
    65  		{
    66  			Block: `
    67  				function TestBreak1 {
    68  					out 4
    69  					break TestBreak1
    70  					out 6
    71  				}
    72  				TestBreak1
    73  				exitnum`,
    74  			Stdout:  "4\n0\n",
    75  			ExitNum: 0,
    76  		},
    77  		{
    78  			Block: `
    79  				function TestBreak2 {
    80  					%[1..5] -> foreach i {
    81  						out $i
    82  						if { $i == 3 } then {
    83  							break foreach
    84  						}
    85  						out "foobar"
    86  					}
    87  				}
    88  				TestBreak2`,
    89  			Stdout:  "1\nfoobar\n2\nfoobar\n3\n",
    90  			ExitNum: 0,
    91  		},
    92  		{
    93  			Block: `
    94  				function TestBreak3 {
    95  					%[1..5] -> foreach i {
    96  						out $i
    97  						if { $i == 3 } then {
    98  							break TestBreak3
    99  						}
   100  						out "foobar"
   101  					}
   102  				}
   103  				TestBreak3`,
   104  			Stdout:  "1\nfoobar\n2\nfoobar\n3\n",
   105  			ExitNum: 0,
   106  		},
   107  	}
   108  
   109  	test.RunMurexTests(tests, t)
   110  }
   111  
   112  func TestContinue(t *testing.T) {
   113  	tests := []test.MurexTest{
   114  		{
   115  			Block: `
   116  				function TestContinue0 {
   117  					out 3
   118  					continue TestContinue0
   119  					out 5
   120  				}
   121  				TestContinue0`,
   122  			Stdout:  "3\n5\n",
   123  			ExitNum: 0,
   124  		},
   125  		{
   126  			Block: `
   127  				function TestContinue1 {
   128  					out 4
   129  					continue TestContinue1
   130  					out 6
   131  				}
   132  				TestContinue1
   133  				exitnum`,
   134  			Stdout:  "4\n6\n0\n",
   135  			ExitNum: 0,
   136  		},
   137  		{
   138  			Block: `
   139  				function TestContinue2 {
   140  					%[1..5] -> foreach i {
   141  						out $i
   142  						if { $i == 3 } then {
   143  							continue foreach
   144  						}
   145  						out "foobar"
   146  					}
   147  				}
   148  				TestContinue2`,
   149  			Stdout:  "1\nfoobar\n2\nfoobar\n3\n4\nfoobar\n5\nfoobar\n",
   150  			ExitNum: 0,
   151  		},
   152  		{
   153  			Block: `
   154  				function TestContinue3 {
   155  					%[1..5] -> foreach i {
   156  						out $i
   157  						if { $i == 3 } then {
   158  							continue TestContinue3
   159  						}
   160  						out "foobar"
   161  					}
   162  				}
   163  				TestContinue3`,
   164  			Stdout:  "1\nfoobar\n2\nfoobar\n3\n",
   165  			ExitNum: 0,
   166  		},
   167  	}
   168  
   169  	test.RunMurexTests(tests, t)
   170  }