autoc 1.3 → 1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/doc/AutoC.html +55 -55
  4. data/doc/AutoC/Code.html +60 -57
  5. data/doc/AutoC/Collection.html +134 -124
  6. data/doc/AutoC/HashMap.html +147 -185
  7. data/doc/AutoC/HashSet.html +114 -325
  8. data/doc/AutoC/Iterators.html +126 -0
  9. data/doc/AutoC/Iterators/Bidirectional.html +204 -0
  10. data/doc/AutoC/Iterators/Unidirectional.html +200 -0
  11. data/doc/AutoC/List.html +81 -76
  12. data/doc/AutoC/Maps.html +290 -0
  13. data/doc/AutoC/Module.html +72 -69
  14. data/doc/AutoC/Module/File.html +55 -52
  15. data/doc/AutoC/Module/Header.html +55 -52
  16. data/doc/AutoC/Module/Source.html +63 -60
  17. data/doc/AutoC/Priority.html +57 -57
  18. data/doc/AutoC/Queue.html +75 -74
  19. data/doc/AutoC/Reference.html +92 -91
  20. data/doc/AutoC/Sets.html +520 -0
  21. data/doc/AutoC/String.html +70 -69
  22. data/doc/AutoC/TreeMap.html +1565 -0
  23. data/doc/AutoC/TreeSet.html +1447 -0
  24. data/doc/AutoC/Type.html +184 -110
  25. data/doc/AutoC/UserDefinedType.html +102 -102
  26. data/doc/AutoC/Vector.html +100 -91
  27. data/doc/_index.html +97 -33
  28. data/doc/class_list.html +24 -31
  29. data/doc/css/full_list.css +32 -31
  30. data/doc/css/style.css +220 -78
  31. data/doc/file.CHANGES.html +37 -30
  32. data/doc/file.README.html +29 -30
  33. data/doc/file_list.html +29 -31
  34. data/doc/frames.html +7 -16
  35. data/doc/index.html +29 -30
  36. data/doc/js/app.js +100 -76
  37. data/doc/js/full_list.js +170 -135
  38. data/doc/method_list.html +877 -431
  39. data/doc/top-level-namespace.html +35 -35
  40. data/lib/autoc.rb +4 -2
  41. data/lib/autoc/collection.rb +10 -4
  42. data/lib/autoc/collection/hash_map.rb +22 -41
  43. data/lib/autoc/collection/hash_set.rb +13 -120
  44. data/lib/autoc/collection/iterator.rb +39 -0
  45. data/lib/autoc/collection/list.rb +7 -5
  46. data/lib/autoc/collection/map.rb +41 -0
  47. data/lib/autoc/collection/queue.rb +8 -8
  48. data/lib/autoc/collection/set.rb +134 -0
  49. data/lib/autoc/collection/tree_map.rb +464 -0
  50. data/lib/autoc/collection/tree_set.rb +611 -0
  51. data/lib/autoc/collection/vector.rb +8 -4
  52. data/lib/autoc/string.rb +1 -1
  53. data/lib/autoc/type.rb +3 -0
  54. data/test/test.rb +2 -2
  55. data/test/test_auto.c +7141 -0
  56. data/test/test_auto.h +753 -0
  57. data/test/test_int_tree_set.rb +111 -0
  58. data/test/test_value_hash_map.rb +1 -1
  59. data/test/test_value_hash_set.rb +1 -1
  60. data/test/test_value_tree_map.rb +176 -0
  61. data/test/test_value_tree_set.rb +173 -0
  62. metadata +21 -5
@@ -0,0 +1,111 @@
1
+ type_test(AutoC::TreeSet, :IntTreeSet, :int) do
2
+
3
+ setup %~#{type} t; #{ctor}(&t);~
4
+ cleanup %~#{dtor}(&t);~
5
+
6
+ test :create, %~
7
+ TEST_TRUE( #{empty}(&t) );
8
+ TEST_EQUAL( #{size}(&t), 0 );
9
+ ~
10
+
11
+ test :put, %~
12
+ TEST_EQUAL( #{size}(&t), 0 );
13
+ TEST_FALSE( #{contains}(&t, 1) );
14
+ TEST_TRUE( #{put}(&t, 1) );
15
+ TEST_TRUE( #{contains}(&t, 1) );
16
+ TEST_FALSE( #{put}(&t, 1) );
17
+ TEST_EQUAL( #{size}(&t), 1 );
18
+ TEST_TRUE( #{put}(&t, -1) );
19
+ TEST_TRUE( #{put}(&t, 2) );
20
+ TEST_EQUAL( #{size}(&t), 3 );
21
+ TEST_FALSE( #{contains}(&t, 0) );
22
+ ~
23
+
24
+ setup %~
25
+ int i, c = 3;
26
+ #{type} t1, t2;
27
+ #{ctor}(&t1);
28
+ #{ctor}(&t2);
29
+ for(i = 0; i < c; ++i) {
30
+ #{put}(&t1, i);
31
+ #{put}(&t2, i);
32
+ }
33
+ ~
34
+ cleanup %~
35
+ #{dtor}(&t1);
36
+ #{dtor}(&t2);
37
+ ~
38
+
39
+ test :equal, %~
40
+ TEST_EQUAL( #{size}(&t1), #{size}(&t2) );
41
+ TEST_TRUE( #{equal}(&t1, &t2) );
42
+ #{put}(&t2, -1);
43
+ TEST_NOT_EQUAL( #{size}(&t1), #{size}(&t2) );
44
+ TEST_FALSE( #{equal}(&t1, &t2) );
45
+ ~
46
+
47
+ setup %~
48
+ int values[] = {2,-6,7,-6,1,2,5,7,4,3,1,-6,0};
49
+ int* p = values;
50
+ #{type} t;
51
+ #{ctor}(&t);
52
+ while(*p != 0) {
53
+ #{put}(&t, *p);
54
+ TEST_TRUE( #{contains}(&t, *p) );
55
+ ++p;
56
+ }
57
+ ~
58
+ cleanup %~
59
+ #{dtor}(&t);
60
+ ~
61
+
62
+ test :size, %~
63
+ TEST_EQUAL( #{size}(&t), 7 );
64
+ ~
65
+
66
+ test :contains, %~
67
+ TEST_TRUE( #{contains}(&t, 1) );
68
+ TEST_FALSE( #{contains}(&t, -1) );
69
+ ~
70
+
71
+ test :iterateAscending, %~
72
+ int cur, pre, start = 1;
73
+ #{it} it;
74
+ #{itCtorEx}(&it, &t, 1);
75
+ cur = pre = #{peekLowest}(&t);
76
+ while(#{itMove}(&it)) {
77
+ cur = #{itGet}(&it);
78
+ if(start) {
79
+ start = 0;
80
+ } else {
81
+ TEST_TRUE( pre < cur );
82
+ pre = cur;
83
+ }
84
+ }
85
+ ~
86
+
87
+ test :iterateDescending, %~
88
+ int cur, pre, start = 1;
89
+ #{it} it;
90
+ #{itCtorEx}(&it, &t, 0);
91
+ cur = pre = #{peekHighest}(&t);
92
+ while(#{itMove}(&it)) {
93
+ cur = #{itGet}(&it);
94
+ if(start) {
95
+ start = 0;
96
+ } else {
97
+ TEST_TRUE( pre > cur );
98
+ pre = cur;
99
+ }
100
+ }
101
+ ~
102
+
103
+ test :peekHighest, %~
104
+ TEST_EQUAL( #{peekHighest}(&t), 7 );
105
+ ~
106
+
107
+ test :peekLowest, %~
108
+ TEST_EQUAL( #{peekLowest}(&t), -6 );
109
+ ~
110
+
111
+ end
@@ -1,6 +1,6 @@
1
1
  require "value"
2
2
 
3
- type_test(AutoC::HashMap, :ValueMap, Value, Value) do
3
+ type_test(AutoC::HashMap, :ValueHashMap, Value, Value) do
4
4
 
5
5
  def write_defs(stream)
6
6
  stream << %~
@@ -1,6 +1,6 @@
1
1
  require "value"
2
2
 
3
- type_test(AutoC::HashSet, :ValueSet, Value) do
3
+ type_test(AutoC::HashSet, :ValueHashSet, Value) do
4
4
 
5
5
  def write_defs(stream)
6
6
  stream << %~
@@ -0,0 +1,176 @@
1
+ require "value"
2
+
3
+ type_test(AutoC::TreeMap, :ValueTreeMap, Value, Value) do
4
+
5
+ def write_defs(stream)
6
+ stream << %~
7
+ #undef PUT
8
+ #define PUT(t, k, v) {#{key.type} ek; #{value.type} ev; #{key.ctorEx}(ek, k); #{value.ctorEx}(ev, v); #{put}(t, ek, ev); #{key.dtor}(ek); #{value.dtor}(ev);}
9
+ ~
10
+ super
11
+ end
12
+
13
+ setup %~#{type} t;~
14
+ cleanup %~#{dtor}(&t);~
15
+
16
+ test :create, %~
17
+ #{ctor}(&t);
18
+ TEST_EQUAL( #{size}(&t), 0 );
19
+ TEST_TRUE( #{empty}(&t) );
20
+ ~
21
+
22
+ test :purge, %~
23
+ #{ctor}(&t);
24
+ PUT(&t, 0, 0);
25
+ TEST_FALSE( #{empty}(&t) );
26
+ #{purge}(&t);
27
+ TEST_TRUE( #{empty}(&t) );
28
+ ~
29
+
30
+ test :empty, %~
31
+ #{ctor}(&t);
32
+ TEST_TRUE( #{empty}(&t) );
33
+ PUT(&t, 1, -1);
34
+ TEST_FALSE( #{empty}(&t) );
35
+ ~
36
+
37
+ test :size, %~
38
+ #{ctor}(&t);
39
+ TEST_TRUE( #{empty}(&t) );
40
+ TEST_EQUAL( #{size}(&t), 0 );
41
+ PUT(&t, 1, -1);
42
+ TEST_FALSE( #{empty}(&t) );
43
+ TEST_EQUAL( #{size}(&t), 1 );
44
+ ~
45
+
46
+ setup %~
47
+ /* {i => -i} */
48
+ int i, c = 3;
49
+ #{type} t;
50
+ #{key.type} k;
51
+ #{element.type} v;
52
+ #{ctor}(&t);
53
+ for(i = 1; i <= c; i++) {
54
+ PUT(&t, i, -i);
55
+ }
56
+ ~
57
+ cleanup %~
58
+ #{dtor}(&t);
59
+ ~
60
+
61
+ test :copy, %~
62
+ #{type} t2;
63
+ #{copy}(&t2, &t);
64
+ TEST_TRUE( #{equal}(&t2, &t) );
65
+ #{dtor}(&t2);
66
+ ~
67
+
68
+ test :equal, %~
69
+ #{type} t2;
70
+ #{copy}(&t2, &t);
71
+ TEST_TRUE( #{equal}(&t2, &t) );
72
+ PUT(&t2, -1, 1);
73
+ TEST_FALSE( #{equal}(&t2, &t) );
74
+ #{dtor}(&t2);
75
+ ~
76
+
77
+ test :containsKey, %~
78
+ #{element.ctor(:k)};
79
+ #{element.set}(k, 0);
80
+ TEST_FALSE( #{containsKey}(&t, k) );
81
+ #{element.set}(k, 1);
82
+ TEST_TRUE( #{containsKey}(&t, k) );
83
+ #{element.dtor(:k)};
84
+ ~
85
+
86
+ test :get, %~
87
+ #{element.ctor(:k)};
88
+ #{element.set}(k, 3);
89
+ TEST_TRUE( #{containsKey}(&t, k) );
90
+ v = #{get}(&t, k);
91
+ TEST_EQUAL( #{element.get}(v), -3 );
92
+ #{element.dtor(:v)};
93
+ #{element.dtor(:k)};
94
+ ~
95
+
96
+ test :putNew, %~
97
+ #{element.ctor(:k)};
98
+ #{element.set}(k, 0);
99
+ TEST_FALSE( #{containsKey}(&t, k) );
100
+ TEST_TRUE( #{put}(&t, k, k) ) ;
101
+ #{element.dtor(:k)};
102
+ ~
103
+
104
+ test :putExisting, %~
105
+ #{element.ctor(:k)};
106
+ #{element.set}(k, 1);
107
+ TEST_TRUE( #{containsKey}(&t, k) );
108
+ TEST_FALSE( #{put}(&t, k, k) ) ;
109
+ #{element.dtor(:k)};
110
+ ~
111
+
112
+ test :remove, %~
113
+ #{element.ctor(:k)};
114
+ #{element.set}(k, 1);
115
+ TEST_TRUE( #{containsKey}(&t, k) );
116
+ TEST_TRUE( #{remove}(&t, k) ) ;
117
+ TEST_FALSE( #{containsKey}(&t, k) );
118
+ #{element.dtor(:k)};
119
+ ~
120
+
121
+ test :removeNone, %~
122
+ #{element.ctor(:k)};
123
+ #{element.set}(k, 0);
124
+ TEST_FALSE( #{containsKey}(&t, k) );
125
+ TEST_FALSE( #{remove}(&t, k) ) ;
126
+ TEST_FALSE( #{containsKey}(&t, k) );
127
+ #{element.dtor(:k)};
128
+ ~
129
+
130
+ test :replace, %~
131
+ #{element.ctor(:k)};
132
+ #{element.set}(k, 1);
133
+ TEST_TRUE( #{containsKey}(&t, k) );
134
+ TEST_TRUE( #{replace}(&t, k, k) ) ;
135
+ TEST_TRUE( #{containsKey}(&t, k) );
136
+ #{element.dtor(:k)};
137
+ ~
138
+
139
+ test :replaceNone, %~
140
+ #{element.ctor(:k)};
141
+ #{element.set}(k, 0);
142
+ TEST_FALSE( #{containsKey}(&t, k) );
143
+ TEST_FALSE( #{replace}(&t, k, k) ) ;
144
+ TEST_FALSE( #{containsKey}(&t, k) );
145
+ #{element.dtor(:k)};
146
+ ~
147
+
148
+ test :iterateAscending, %~
149
+ #{it} it;
150
+ #{itCtor}(&it, &t);
151
+ while(#{itMove}(&it)) {
152
+ #{key.type} k;
153
+ #{element.type} v;
154
+ k = #{itGetKey}(&it);
155
+ v = #{itGetElement}(&it);
156
+ TEST_EQUAL( #{key.get}(k), -#{value.get}(v) );
157
+ #{key.dtor}(k);
158
+ #{value.dtor}(v);
159
+ }
160
+ ~
161
+
162
+ test :iterateDescending, %~
163
+ #{it} it;
164
+ #{itCtorEx}(&it, &t, 0);
165
+ while(#{itMove}(&it)) {
166
+ #{key.type} k;
167
+ #{element.type} v;
168
+ k = #{itGetKey}(&it);
169
+ v = #{itGetElement}(&it);
170
+ TEST_EQUAL( #{key.get}(k), -#{value.get}(v) );
171
+ #{key.dtor}(k);
172
+ #{value.dtor}(v);
173
+ }
174
+ ~
175
+
176
+ end
@@ -0,0 +1,173 @@
1
+ require "value"
2
+
3
+ type_test(AutoC::TreeSet, :ValueTreeSet, Value) do
4
+
5
+ def write_defs(stream)
6
+ stream << %~
7
+ #undef PUT
8
+ #define PUT(t, v) {#{element.type} e; #{element.ctorEx}(e, v); #{put}(t, e); #{element.dtor}(e);}
9
+ ~
10
+ super
11
+ end
12
+
13
+ setup %~#{type} t;~
14
+ cleanup %~#{dtor}(&t);~
15
+
16
+ test :create, %~
17
+ #{ctor}(&t);
18
+ TEST_EQUAL( #{size}(&t), 0 );
19
+ TEST_TRUE( #{empty}(&t) );
20
+ ~
21
+
22
+ test :purge, %~
23
+ #{ctor}(&t);
24
+ PUT(&t, 0);
25
+ TEST_FALSE( #{empty}(&t) );
26
+ #{purge}(&t);
27
+ TEST_TRUE( #{empty}(&t) );
28
+ ~
29
+
30
+ setup %~
31
+ /* a: [1,2,3], e: 0 */
32
+ #{type} a;
33
+ #{element.type} e;
34
+ #{element.ctor(:e)};
35
+ #{ctor}(&a);
36
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
37
+ ~
38
+ cleanup %~
39
+ #{dtor}(&a);
40
+ #{element.dtor(:e)};
41
+ ~
42
+
43
+ test :contains, %~
44
+ TEST_FALSE( #{contains}(&a, e) );
45
+ #{element.set}(e, 1);
46
+ TEST_TRUE( #{contains}(&a, e) );
47
+ ~
48
+
49
+ test :get, %~
50
+ #{element.type} e2;
51
+ #{element.set}(e, -1);
52
+ #{put}(&a, e);
53
+ e2 = #{get}(&a, e);
54
+ TEST_TRUE( #{element.equal}(e, e2) );
55
+ #{element.dtor(:e2)};
56
+ ~
57
+
58
+ test :putNew, %~
59
+ #{element.set}(e, -1);
60
+ TEST_FALSE( #{contains}(&a, e) );
61
+ TEST_TRUE( #{put}(&a, e) );
62
+ TEST_TRUE( #{contains}(&a, e) );
63
+ ~
64
+
65
+ test :putExisting, %~
66
+ #{element.set}(e, -1);
67
+ TEST_FALSE( #{contains}(&a, e) );
68
+ TEST_TRUE( #{put}(&a, e) );
69
+ TEST_TRUE( #{contains}(&a, e) );
70
+ TEST_FALSE( #{put}(&a, e) );
71
+ ~
72
+
73
+ test :replace, %~
74
+ #{element.set}(e, 1);
75
+ TEST_TRUE( #{contains}(&a, e) );
76
+ TEST_TRUE( #{replace}(&a, e) );
77
+ TEST_TRUE( #{contains}(&a, e) );
78
+ ~
79
+
80
+ test :replaceNone, %~
81
+ #{element.set}(e, -1);
82
+ TEST_FALSE( #{contains}(&a, e) );
83
+ TEST_FALSE( #{replace}(&a, e) );
84
+ TEST_FALSE( #{contains}(&a, e) );
85
+ ~
86
+
87
+ test :remove, %~
88
+ #{element.set}(e, 1);
89
+ TEST_TRUE( #{contains}(&a, e) );
90
+ TEST_TRUE( #{remove}(&a, e) );
91
+ TEST_FALSE( #{contains}(&a, e) );
92
+ ~
93
+
94
+ test :removeNone, %~
95
+ #{element.set}(e, -1);
96
+ TEST_FALSE( #{contains}(&a, e) );
97
+ TEST_FALSE( #{remove}(&a, e) );
98
+ ~
99
+
100
+ test :iterate, %~
101
+ #{it} it;
102
+ size_t i = 0;
103
+ #{itCtor}(&it, &a);
104
+ while(#{itMove}(&it)) {
105
+ #{element.type} e2 = #{itGet}(&it);
106
+ #{element.dtor(:e2)};
107
+ i++;
108
+ }
109
+ TEST_EQUAL( #{size}(&a), i );
110
+ ~
111
+
112
+ setup %~
113
+ /* a: [1,2,3] */
114
+ #{type} a, b;
115
+ #{ctor}(&a);
116
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
117
+ ~
118
+ cleanup %~
119
+ #{dtor}(&a);
120
+ #{dtor}(&b);
121
+ ~
122
+
123
+ test :copy, %~
124
+ #{copy}(&b, &a);
125
+ TEST_TRUE( #{equal}(&a, &b) );
126
+ ~
127
+
128
+ test :empty, %~
129
+ #{ctor}(&b);
130
+ TEST_FALSE( #{empty}(&a) );
131
+ TEST_TRUE( #{empty}(&b) );
132
+ ~
133
+
134
+ setup %~
135
+ /* a: [1,2,3], b: [2,3,4] */
136
+ #{type} a, b, c;
137
+ #{ctor}(&a);
138
+ #{ctor}(&b);
139
+ #{ctor}(&c);
140
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
141
+ PUT(&b, 4); PUT(&b, 2); PUT(&b, 3);
142
+ ~
143
+ cleanup %~
144
+ #{dtor}(&a);
145
+ #{dtor}(&b);
146
+ #{dtor}(&c);
147
+ ~
148
+
149
+ test :exclude, %~
150
+ PUT(&c, 1);
151
+ #{exclude}(&a, &b);
152
+ TEST_TRUE( #{equal}(&a, &c) );
153
+ ~
154
+
155
+ test :include, %~
156
+ PUT(&c, 1); PUT(&c, 2); PUT(&c, 3); PUT(&c, 4);
157
+ #{include}(&a, &b);
158
+ TEST_TRUE( #{equal}(&a, &c) );
159
+ ~
160
+
161
+ test :invert, %~
162
+ PUT(&c, 1); PUT(&c, 4);
163
+ #{invert}(&a, &b);
164
+ TEST_TRUE( #{equal}(&a, &c) );
165
+ ~
166
+
167
+ test :retain, %~
168
+ PUT(&c, 2); PUT(&c, 3);
169
+ #{retain}(&a, &b);
170
+ TEST_TRUE( #{equal}(&a, &c) );
171
+ ~
172
+
173
+ end