improve shared symbol tables
[awesomized/ext-ion] / tests / Symbol / Table.phpt
1 --TEST--
2 ion\Symbol\Table
3 --EXTENSIONS--
4 ion
5 --FILE--
6 TEST
7 <?php
8
9 echo "global\n";
10 var_dump(ion\Symbol\Table\System());
11 var_dump(ion\Symbol\Table\PHP());
12 var_dump(ion\Symbol\Table\PHP()->find(1));
13
14 echo "shared\n";
15 $shared = new ion\Symbol\Table\Shared("shared");
16
17 echo "add 3 syms\n";
18 var_dump(
19 $shared->add("sym1"),
20 $shared->add("sym2"),
21 $sid3 = $shared->add($s3 = new ion\Symbol("sym3")),
22 );
23
24 echo "s3, sid3\n";
25 var_dump($s3, $sid3);
26
27 echo "find sym3, sid3\n";
28 var_dump($shared->find("sym3"));
29 var_dump($shared->find($sid3));
30
31 echo "local\n";
32 $local = new ion\Symbol\Table\Local;
33 echo "import PHP\n";
34 $local->import(ion\Symbol\Table\PHP());
35 echo "import shared\n";
36 $local->import($shared);
37
38 echo "find sym1, local sym1\n";
39 var_dump($local->find("sym1"));
40 var_dump($local->findLocal("sym1"));
41
42 echo "add, find, local sym4\n";
43 var_dump($local->add("sym4"));
44 var_dump($local->find("sym4"));
45 var_dump($local->findLocal("sym4"));
46 ?>
47 DONE
48 --EXPECTF--
49 TEST
50 global
51 object(ion\Symbol\Table\Shared)#%d (3) {
52 ["name"]=>
53 string(4) "$ion"
54 ["version"]=>
55 int(1)
56 ["symbols":"ion\Symbol\Table\Shared":private]=>
57 array(0) {
58 }
59 }
60 object(ion\Symbol\Table\Shared)#%d (3) {
61 ["name"]=>
62 string(3) "PHP"
63 ["version"]=>
64 int(1)
65 ["symbols":"ion\Symbol\Table\Shared":private]=>
66 array(0) {
67 }
68 }
69 object(ion\Symbol)#%d (3) {
70 ["value"]=>
71 string(3) "PHP"
72 ["sid"]=>
73 int(1)
74 ["importLocation"]=>
75 object(ion\Symbol\ImportLocation)#%d (2) {
76 ["name"]=>
77 string(3) "PHP"
78 ["location"]=>
79 int(1)
80 }
81 }
82 shared
83 add 3 syms
84 int(1)
85 int(2)
86 int(3)
87 s3, sid3
88 object(ion\Symbol)#%d (3) {
89 ["value"]=>
90 string(4) "sym3"
91 ["sid"]=>
92 int(-1)
93 ["importLocation"]=>
94 NULL
95 }
96 int(3)
97 find sym3, sid3
98 object(ion\Symbol)#%d (3) {
99 ["value"]=>
100 string(4) "sym3"
101 ["sid"]=>
102 int(3)
103 ["importLocation"]=>
104 object(ion\Symbol\ImportLocation)#%d (2) {
105 ["name"]=>
106 string(6) "shared"
107 ["location"]=>
108 int(3)
109 }
110 }
111 object(ion\Symbol)#%d (3) {
112 ["value"]=>
113 string(4) "sym3"
114 ["sid"]=>
115 int(3)
116 ["importLocation"]=>
117 object(ion\Symbol\ImportLocation)#%d (2) {
118 ["name"]=>
119 string(6) "shared"
120 ["location"]=>
121 int(3)
122 }
123 }
124 local
125 import PHP
126 import shared
127 find sym1, local sym1
128 object(ion\Symbol)#%d (3) {
129 ["value"]=>
130 string(4) "sym1"
131 ["sid"]=>
132 int(1)
133 ["importLocation"]=>
134 object(ion\Symbol\ImportLocation)#%d (2) {
135 ["name"]=>
136 string(6) "shared"
137 ["location"]=>
138 int(1)
139 }
140 }
141 NULL
142 add, find, local sym4
143 int(23)
144 object(ion\Symbol)#%d (3) {
145 ["value"]=>
146 string(4) "sym4"
147 ["sid"]=>
148 int(23)
149 ["importLocation"]=>
150 NULL
151 }
152 object(ion\Symbol)#%d (3) {
153 ["value"]=>
154 string(4) "sym4"
155 ["sid"]=>
156 int(23)
157 ["importLocation"]=>
158 NULL
159 }
160 DONE