reforge symbol/context management
[scilab.git] / scilab / modules / core / tests / unit_tests / global.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 prot=funcprot();funcprot(0);
8 global a
9 a=133;
10 clear a;
11 if exists('a') then pause,end
12 global a;
13 if a<>133 then pause,end
14 a=['1234','456'];
15 if a(1)<>'1234' then pause,end
16
17 global b
18 b=10;a=-1;
19 clear a b
20 global a b
21 if a<>-1|b<>10 then pause,end
22 //
23 clearglobal()
24 try
25  a
26  n=0
27 catch
28  [str,n]=lasterror(%t);
29 end
30 if n == 0 then pause,end
31
32 global a b c 
33 a=1;b=2;c=3;
34 clearglobal b
35 try
36  b
37  n=0
38 catch
39  [str,n]=lasterror(%t);
40 end
41 if n == 0 then pause,end
42
43 if a<>1|c<>3 then pause,end
44
45 clearglobal c
46 try
47  c
48  n=0
49 catch
50  [str,n]=lasterror(%t);
51 end
52 if n == 0 then pause,end
53 if a<>1 then pause,end
54
55 clearglobal a
56 try
57  a
58  n=0
59 catch
60  [str,n]=lasterror(%t);
61 end
62 if n == 0 then pause,end
63
64 clearglobal()
65
66
67 //
68 global a
69 a=133;
70 //insertion
71 a(2,2)=10;
72 if or(a<>[133 0;0 10]) then pause,end
73 clear a;
74 global a;
75 if or(a<>[133 0;0 10]) then pause,end
76
77 clear a;
78 global a;
79 if a(1,1)<>133  then pause,end
80
81 // global between the base workspace and the function workspace
82
83 deff('foo()','global a;if a<>133 then pause,end,a=10')
84 a=133;
85 foo();
86 if a<>10 then pause,end
87
88 // skipping a level
89 deff('y=foo()','y=f1()')
90 deff('y=f1(x)','global a,y=a^2')
91
92 a=5;
93 if foo()<>a^2 then pause,end
94
95 // a global variable used as an argument
96 deff('y=foo()','global a;a=143;y=f1(a)')
97 deff('y=f1(x)','a=1;y=x^2')
98 if foo()<>143^2|a<>143 then pause,end
99
100
101 //dealing with insertion and extraction
102 deff('foo()','global a;a=[];for k=1:5,a(1,k)=k;end')
103 foo();
104 if or(a<>(1:5)) then pause,end
105
106 deff('y=foo()','global a;y=a(1:2:$)')
107 if or(foo()<>(1:2:5)) then pause,end
108
109 if ~isglobal("a") then pause,end
110 clearglobal a
111 a=1;
112 if isglobal("a") then pause,end
113 if isglobal("1") then pause,end
114
115 clearglobal()
116
117 gsz=int(rand() * 1000);
118
119 global a b c
120 n=int(sqrt(gsz(1)))-3;
121 b=ones(n,n);
122 deff('foo()','global b;for k=1:5,b=[b ones(n,10)];end')
123 foo()
124 if or(size(b)<>[n,n+50]) then pause,end
125 if find(b<>1)<>[] then pause,end
126 clearglobal a b c
127
128 //test passing global variable as an argument
129 global G;
130 G=1;
131 function foo(x),x=-1,endfunction
132 foo(G);if G<>1 then pause,end
133
134 //change the global variable that had been passed as an argument
135 function y=foo(x),global G,G=33,y=x,endfunction
136 if (foo(G)<>1) then pause,end
137 clearglobal G
138
139 function y=foo(),global a b,b=[],a=1:3,y=foo1(a),endfunction
140 function y=foo1(x),global b,b=[b 1],y=x(3),endfunction
141 if (foo()<>3) then pause,end
142 clearglobal a b 
143
144 global G b;
145 a=rand(3,3);
146 G=mlist(['test','a'],a);
147
148 function V=%s_i_test(i,j,I,V)
149   global b; b=[b 1:5];  V.a(i,j)=I;
150 endfunction
151 G(1,3)=0;a(1,3)=0;
152 if or(a<>G.a) then pause,end
153
154 // Is it the good choice?
155 function r=%test_e(i,j,V)
156   global G; G.a(i,j)=1;  r=V.a(i,j);
157 endfunction
158 a13=G.a(1,3);
159 X=G(1,3)
160 if or(G.a(1,3)<>1) then pause,end
161 funcprot(prot);
162