summaryrefslogtreecommitdiff
path: root/Windows/spice/examples/control_structs/repeat3.sp
blob: 5650252ab222179b31a5a8510212394379655a1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Test sequences for ngspice control structures
*vectors are used (except foreach)
*start in interactive mode

.control

* test for while, repeat, if, break
  let loop = 0
  while loop < 4
    let index = 0
    repeat
      let index = index + 1
      if index > 4
        break
      end  
    end
    echo index "$&index"   loop "$&loop"
    let loop = loop + 1
  end


* test sequence for while, dowhile  
  let loop = 0
  echo
  echo enter loop with  "$&loop" 
  dowhile loop < 3
    echo within dowhile loop "$&loop"     
    let loop = loop + 1 
  end
  echo after dowhile loop "$&loop" 
  echo  
  let loop = 0
  while loop < 3
    echo within while loop "$&loop"   
    let loop = loop + 1
  end
  echo after while loop "$&loop"  
  let loop = 3
  echo
  echo enter loop with  "$&loop" 
  dowhile loop < 3
    echo within dowhile loop "$&loop"     $ output expected
    let loop = loop + 1 
  end
  echo after dowhile loop "$&loop"   
  echo  
  let loop = 3
  while loop < 3
    echo within while loop "$&loop"       $ no output expected   
    let loop = loop + 1
  end
  echo after while loop "$&loop"   
 
  
* test sequence for foreach
  echo
  foreach outvar 0 0.5 1 1.5
    echo parameters: $outvar   $ foreach parameters are variables, not vectors!
  end  
  
* test for if ... else ... end  
  echo
  let loop = 0 
  let index = 1 
  dowhile loop < 10
    let index = index * 2
    if index < 128
      echo "$&index" lt 128
    else
      echo "$&index"  ge 128  
    end
    let loop = loop + 1
  end   
  
* simple test for label, goto
  echo
  let loop = 0
  label starthere 
  echo start "$&loop"
  let loop = loop + 1
  if loop < 3
    goto starthere
  end  
  echo end "$&loop"   
  
* test for label, nested goto
  echo
  let loop = 0
  label starthere1 
  echo start nested "$&loop"
  let loop = loop + 1
  if loop < 3
    if loop < 3
      goto starthere1
    end  
  end  
  echo end "$&loop"   
  
* test for label, goto   
  echo
  let index = 0    
  label starthere2
  let loop = 0   
  echo We are at start with index "$&index" and loop "$&loop"
  if index < 6
    label inhere
    let index = index + 1
    if loop < 3
      let loop = loop + 1
      if index > 1
        echo jump2
        goto starthere2
      end  
    end
    echo jump
    goto inhere
  end 
  echo We are at end with index "$&index" and loop "$&loop"   
  
* test goto in while loop
  echo
  let loop = 0
  if 1    $ outer loop to allow nested forward label 'endlabel'
    while loop < 10
      if loop > 5
        echo jump
        goto endlabel
      end
      let loop = loop + 1
    end
    echo before  $ never reached
    label endlabel
    echo after "$&loop"  
  end  

*test for using variables
* simple test for label, goto
  echo
  set loop = 0
  label starthe 
  echo start $loop
  let loop = $loop + 1  $ expression needs vector at lhs
  set loop = "$&loop"   $ convert vector contents to variable
  if $loop < 3
    goto starthe
  end  
  echo end $loop
.endc