* Bug 16358 fixed: isdef([],..) yielded an error
[scilab.git] / scilab / modules / core / tests / unit_tests / exists.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2008 - INRIA
4 // Copyright (C) 2010 - DIGITEO - Bruno JOFRET
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8
9 // <-- CLI SHELL MODE -->
10 // <-- NO CHECK REF -->
11
12 //exists
13
14 // []
15 assert_checkequal(exists([]),[]);
16 assert_checkequal(exists([],"a"), []);
17 assert_checkequal(exists([],"l"), []);
18 assert_checkequal(exists([],"n"), []);
19
20 a=1;
21 assert_checkequal(exists('a'), 1);
22 clear a;
23 assert_checkequal(exists('a'), 0);
24
25 a=1; b=1;
26 assert_checkequal(exists(['a', 'b']), [1, 1]);
27 assert_checkequal(exists(['a'; 'b']), [1; 1]);
28 assert_checkequal(exists(['a', 'b'; 'a', 'b']), [1, 1; 1, 1]);
29 clear b;
30 assert_checkequal(exists(['a', 'b']), [1, 0]);
31 assert_checkequal(exists(['a'; 'b']), [1; 0]);
32 assert_checkequal(exists(['b', 'a']), [0, 1]);
33 assert_checkequal(exists(['b'; 'a']), [0; 1]);
34 assert_checkequal(exists(['a', 'b'; 'a', 'b']), [1, 0; 1, 0]);
35 clear a;
36 assert_checkequal(exists(['a', 'b']), [0, 0]);
37 assert_checkequal(exists(['a'; 'b']), [0; 0]);
38 assert_checkequal(exists(['a', 'b'; 'a', 'b']), [0, 0; 0, 0]);
39
40 function __check_exists__(x, scope)
41   assert_checkequal(exists("a", scope), 1);
42 endfunction
43
44 function __check_exists2__(x, scope)
45     a=42; b=42;
46     assert_checkequal(exists(['a', 'b'], scope), [1, 1]);
47     assert_checkequal(exists(['a'; 'b'], scope), [1; 1]);
48     assert_checkequal(exists(['a', 'b'; 'a' 'b'], scope), [1, 1; 1, 1]);
49 endfunction
50
51 function __check_not_exists__(x, scope)
52   assert_checkequal(exists("a", scope), 0);
53 endfunction
54
55 function __check_not_exists2__(x, scope)
56     a=51; b=51;
57     assert_checkequal(exists(['a', 'b'], scope), [0, 0]);
58     assert_checkequal(exists(['a'; 'b'], scope), [0; 0]);
59     assert_checkequal(exists(['a', 'b'; 'a', 'b'], scope), [0, 0; 0, 0]);
60 endfunction
61
62 // Define a ONLY in calling scope
63 a = 42; b=42;
64 __check_exists__([], "all");
65 __check_exists__([], "nolocal");
66 __check_not_exists__([], "local");
67 clear a; clear b;
68
69 // Define a ONLY in function local scope
70 __check_exists__(a = 42, "all");
71 __check_exists__(a = 42, "local");
72 __check_not_exists__(a = 42, "nolocal");
73 __check_exists2__([], "all");
74 __check_exists2__([], "local");
75 __check_not_exists2__([], "nolocal");
76
77 // Define a BOTH in calling and local scope
78 a = 42; b=42;
79 __check_exists__(a = 51, "all");
80 __check_exists__(a = 51, "local");
81 __check_exists__(a = 51, "nolocal");
82 __check_exists2__([], "all");
83 __check_exists2__([], "local");
84 __check_exists2__([], "nolocal");
85 clear a; clear b;