|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); |
|
5 |
|
6 function run_test() { |
|
7 run_next_test(); |
|
8 } |
|
9 |
|
10 add_test(function test_ril_consts_cellbroadcast_misc() { |
|
11 // Must be 16 for indexing. |
|
12 do_check_eq(CB_DCS_LANG_GROUP_1.length, 16); |
|
13 do_check_eq(CB_DCS_LANG_GROUP_2.length, 16); |
|
14 |
|
15 // Array length must be even. |
|
16 do_check_eq(CB_NON_MMI_SETTABLE_RANGES.length & 0x01, 0); |
|
17 for (let i = 0; i < CB_NON_MMI_SETTABLE_RANGES.length;) { |
|
18 let from = CB_NON_MMI_SETTABLE_RANGES[i++]; |
|
19 let to = CB_NON_MMI_SETTABLE_RANGES[i++]; |
|
20 do_check_eq(from < to, true); |
|
21 } |
|
22 |
|
23 run_next_test(); |
|
24 }); |
|
25 |
|
26 add_test(function test_ril_worker_GsmPDUHelper_readCbDataCodingScheme() { |
|
27 let worker = newWorker({ |
|
28 postRILMessage: function(data) { |
|
29 // Do nothing |
|
30 }, |
|
31 postMessage: function(message) { |
|
32 // Do nothing |
|
33 } |
|
34 }); |
|
35 |
|
36 let context = worker.ContextPool._contexts[0]; |
|
37 function test_dcs(dcs, encoding, language, hasLanguageIndicator, messageClass) { |
|
38 context.Buf.readUint8 = function() { |
|
39 return dcs; |
|
40 }; |
|
41 |
|
42 let msg = {}; |
|
43 context.GsmPDUHelper.readCbDataCodingScheme(msg); |
|
44 |
|
45 do_check_eq(msg.dcs, dcs); |
|
46 do_check_eq(msg.encoding, encoding); |
|
47 do_check_eq(msg.language, language); |
|
48 do_check_eq(msg.hasLanguageIndicator, hasLanguageIndicator); |
|
49 do_check_eq(msg.messageClass, messageClass); |
|
50 } |
|
51 |
|
52 function test_dcs_throws(dcs) { |
|
53 context.Buf.readUint8 = function() { |
|
54 return dcs; |
|
55 }; |
|
56 |
|
57 do_check_throws(function() { |
|
58 context.GsmPDUHelper.readCbDataCodingScheme({}); |
|
59 }, "Unsupported CBS data coding scheme: " + dcs); |
|
60 } |
|
61 |
|
62 // Group 0000 |
|
63 for (let i = 0; i < 16; i++) { |
|
64 test_dcs(i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, CB_DCS_LANG_GROUP_1[i], |
|
65 false, GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
66 } |
|
67 |
|
68 // Group 0001 |
|
69 // 0000 GSM 7 bit default alphabet; message preceded by language indication. |
|
70 test_dcs(0x10, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, true, |
|
71 GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
72 // 0001 UCS2; message preceded by language indication. |
|
73 test_dcs(0x11, PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, true, |
|
74 GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
75 |
|
76 // Group 0010 |
|
77 // 0000..0100 |
|
78 for (let i = 0; i < 5; i++) { |
|
79 test_dcs(0x20 + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, |
|
80 CB_DCS_LANG_GROUP_2[i], false, |
|
81 GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
82 } |
|
83 // 0101..1111 Reserved |
|
84 for (let i = 5; i < 16; i++) { |
|
85 test_dcs(0x20 + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, |
|
86 GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
87 } |
|
88 |
|
89 // Group 0100, 0101, 1001 |
|
90 for (let group of [0x40, 0x50, 0x90]) { |
|
91 for (let i = 0; i < 16; i++) { |
|
92 let encoding = i & 0x0C; |
|
93 if (encoding == 0x0C) { |
|
94 encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET; |
|
95 } |
|
96 let messageClass = GECKO_SMS_MESSAGE_CLASSES[i & PDU_DCS_MSG_CLASS_BITS]; |
|
97 test_dcs(group + i, encoding, null, false, messageClass); |
|
98 } |
|
99 } |
|
100 |
|
101 // Group 1111 |
|
102 for (let i = 0; i < 16; i ++) { |
|
103 let encoding = i & 0x04 ? PDU_DCS_MSG_CODING_8BITS_ALPHABET |
|
104 : PDU_DCS_MSG_CODING_7BITS_ALPHABET; |
|
105 let messageClass; |
|
106 switch(i & PDU_DCS_MSG_CLASS_BITS) { |
|
107 case 0x01: messageClass = PDU_DCS_MSG_CLASS_USER_1; break; |
|
108 case 0x02: messageClass = PDU_DCS_MSG_CLASS_USER_2; break; |
|
109 case 0x03: messageClass = PDU_DCS_MSG_CLASS_3; break; |
|
110 default: messageClass = PDU_DCS_MSG_CLASS_NORMAL; break; |
|
111 } |
|
112 test_dcs(0xF0 + i, encoding, null, false, |
|
113 GECKO_SMS_MESSAGE_CLASSES[messageClass]); |
|
114 } |
|
115 |
|
116 // Group 0011, 1000, 1010, 1011, 1100 |
|
117 // 0000..1111 Reserved |
|
118 for (let group of [0x30, 0x80, 0xA0, 0xB0, 0xC0]) { |
|
119 for (let i = 0; i < 16; i++) { |
|
120 test_dcs(group + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, |
|
121 GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); |
|
122 } |
|
123 } |
|
124 |
|
125 // Group 0110, 0111, 1101, 1110 |
|
126 // TODO: unsupported |
|
127 for (let group of [0x60, 0x70, 0xD0, 0xE0]) { |
|
128 for (let i = 0; i < 16; i++) { |
|
129 test_dcs_throws(group + i); |
|
130 } |
|
131 } |
|
132 |
|
133 run_next_test(); |
|
134 }); |
|
135 |
|
136 add_test(function test_ril_worker_GsmPDUHelper_readGsmCbData() { |
|
137 let worker = newWorker({ |
|
138 postRILMessage: function(data) { |
|
139 // Do nothing |
|
140 }, |
|
141 postMessage: function(message) { |
|
142 // Do nothing |
|
143 } |
|
144 }); |
|
145 |
|
146 let context = worker.ContextPool._contexts[0]; |
|
147 function test_data(options, expected) { |
|
148 let readIndex = 0; |
|
149 context.Buf.readUint8 = function() { |
|
150 return options[3][readIndex++]; |
|
151 }; |
|
152 context.Buf.readUint8Array = function(length) { |
|
153 let array = new Uint8Array(length); |
|
154 for (let i = 0; i < length; i++) { |
|
155 array[i] = this.readUint8(); |
|
156 } |
|
157 return array; |
|
158 }; |
|
159 |
|
160 let msg = { |
|
161 encoding: options[0], |
|
162 language: options[1], |
|
163 hasLanguageIndicator: options[2] |
|
164 }; |
|
165 context.GsmPDUHelper.readGsmCbData(msg, options[3].length); |
|
166 |
|
167 do_check_eq(msg.body, expected[0]); |
|
168 do_check_eq(msg.data == null, expected[1] == null); |
|
169 if (expected[1] != null) { |
|
170 do_check_eq(msg.data.length, expected[1].length); |
|
171 for (let i = 0; i < expected[1].length; i++) { |
|
172 do_check_eq(msg.data[i], expected[1][i]); |
|
173 } |
|
174 } |
|
175 do_check_eq(msg.language, expected[2]); |
|
176 } |
|
177 |
|
178 // We're testing Cell Broadcast message body with all zeros octet stream. As |
|
179 // shown in 3GPP TS 23.038, septet 0x00 will be decoded as '@' when both |
|
180 // langTableIndex and langShiftTableIndex equal to |
|
181 // PDU_DCS_MSG_CODING_7BITS_ALPHABET. |
|
182 |
|
183 // PDU_DCS_MSG_CODING_7BITS_ALPHABET |
|
184 test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, |
|
185 [0]], |
|
186 ["@", null, null]); |
|
187 test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, true, |
|
188 [0, 0, 0, 0]], |
|
189 ["@", null, "@@"]); |
|
190 test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, "@@", false, |
|
191 [0]], |
|
192 ["@", null, "@@"]); |
|
193 |
|
194 // PDU_DCS_MSG_CODING_8BITS_ALPHABET |
|
195 test_data([PDU_DCS_MSG_CODING_8BITS_ALPHABET, null, false, |
|
196 [0]], |
|
197 [null, [0], null]); |
|
198 |
|
199 // PDU_DCS_MSG_CODING_16BITS_ALPHABET |
|
200 test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, false, |
|
201 [0x00, 0x40]], |
|
202 ["@", null, null]); |
|
203 test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, true, |
|
204 [0x00, 0x00, 0x00, 0x40]], |
|
205 ["@", null, "@@"]); |
|
206 test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, "@@", false, |
|
207 [0x00, 0x40]], |
|
208 ["@", null, "@@"]); |
|
209 |
|
210 run_next_test(); |
|
211 }); |
|
212 |
|
213 add_test(function test_ril_worker__checkCellBroadcastMMISettable() { |
|
214 let worker = newWorker({ |
|
215 postRILMessage: function(data) { |
|
216 // Do nothing |
|
217 }, |
|
218 postMessage: function(message) { |
|
219 // Do nothing |
|
220 } |
|
221 }); |
|
222 |
|
223 let context = worker.ContextPool._contexts[0]; |
|
224 let ril = context.RIL; |
|
225 |
|
226 function test(from, to, expected) { |
|
227 do_check_eq(expected, ril._checkCellBroadcastMMISettable(from, to)); |
|
228 } |
|
229 |
|
230 test(-2, -1, false); |
|
231 test(-1, 0, false); |
|
232 test(0, 1, true); |
|
233 test(1, 1, false); |
|
234 test(2, 1, false); |
|
235 test(65536, 65537, false); |
|
236 |
|
237 // We have both [4096, 4224), [4224, 4352), so it's actually [4096, 4352), |
|
238 // and [61440, 65536), [65535, 65536), so it's actually [61440, 65536). |
|
239 for (let i = 0; i < CB_NON_MMI_SETTABLE_RANGES.length;) { |
|
240 let from = CB_NON_MMI_SETTABLE_RANGES[i++]; |
|
241 let to = CB_NON_MMI_SETTABLE_RANGES[i++]; |
|
242 if ((from != 4224) && (from != 65535)) { |
|
243 test(from - 1, from, true); |
|
244 } |
|
245 test(from - 1, from + 1, false); |
|
246 test(from - 1, to, false); |
|
247 test(from - 1, to + 1, false); |
|
248 test(from, from + 1, false); |
|
249 test(from, to, false); |
|
250 test(from, to + 1, false); |
|
251 if ((from + 1) < to) { |
|
252 test(from + 1, to, false); |
|
253 test(from + 1, to + 1, false); |
|
254 } |
|
255 if ((to != 4224) && (to < 65535)) { |
|
256 test(to, to + 1, true); |
|
257 test(to + 1, to + 2, true); |
|
258 } |
|
259 } |
|
260 |
|
261 run_next_test(); |
|
262 }); |
|
263 |
|
264 add_test(function test_ril_worker__mergeCellBroadcastConfigs() { |
|
265 let worker = newWorker({ |
|
266 postRILMessage: function(data) { |
|
267 // Do nothing |
|
268 }, |
|
269 postMessage: function(message) { |
|
270 // Do nothing |
|
271 } |
|
272 }); |
|
273 |
|
274 let context = worker.ContextPool._contexts[0]; |
|
275 let ril = context.RIL; |
|
276 |
|
277 function test(olist, from, to, expected) { |
|
278 let result = ril._mergeCellBroadcastConfigs(olist, from, to); |
|
279 do_check_eq(JSON.stringify(expected), JSON.stringify(result)); |
|
280 } |
|
281 |
|
282 test(null, 0, 1, [0, 1]); |
|
283 |
|
284 test([10, 13], 7, 8, [ 7, 8, 10, 13]); |
|
285 test([10, 13], 7, 9, [ 7, 9, 10, 13]); |
|
286 test([10, 13], 7, 10, [ 7, 13]); |
|
287 test([10, 13], 7, 11, [ 7, 13]); |
|
288 test([10, 13], 7, 12, [ 7, 13]); |
|
289 test([10, 13], 7, 13, [ 7, 13]); |
|
290 test([10, 13], 7, 14, [ 7, 14]); |
|
291 test([10, 13], 7, 15, [ 7, 15]); |
|
292 test([10, 13], 7, 16, [ 7, 16]); |
|
293 test([10, 13], 8, 9, [ 8, 9, 10, 13]); |
|
294 test([10, 13], 8, 10, [ 8, 13]); |
|
295 test([10, 13], 8, 11, [ 8, 13]); |
|
296 test([10, 13], 8, 12, [ 8, 13]); |
|
297 test([10, 13], 8, 13, [ 8, 13]); |
|
298 test([10, 13], 8, 14, [ 8, 14]); |
|
299 test([10, 13], 8, 15, [ 8, 15]); |
|
300 test([10, 13], 8, 16, [ 8, 16]); |
|
301 test([10, 13], 9, 10, [ 9, 13]); |
|
302 test([10, 13], 9, 11, [ 9, 13]); |
|
303 test([10, 13], 9, 12, [ 9, 13]); |
|
304 test([10, 13], 9, 13, [ 9, 13]); |
|
305 test([10, 13], 9, 14, [ 9, 14]); |
|
306 test([10, 13], 9, 15, [ 9, 15]); |
|
307 test([10, 13], 9, 16, [ 9, 16]); |
|
308 test([10, 13], 10, 11, [10, 13]); |
|
309 test([10, 13], 10, 12, [10, 13]); |
|
310 test([10, 13], 10, 13, [10, 13]); |
|
311 test([10, 13], 10, 14, [10, 14]); |
|
312 test([10, 13], 10, 15, [10, 15]); |
|
313 test([10, 13], 10, 16, [10, 16]); |
|
314 test([10, 13], 11, 12, [10, 13]); |
|
315 test([10, 13], 11, 13, [10, 13]); |
|
316 test([10, 13], 11, 14, [10, 14]); |
|
317 test([10, 13], 11, 15, [10, 15]); |
|
318 test([10, 13], 11, 16, [10, 16]); |
|
319 test([10, 13], 12, 13, [10, 13]); |
|
320 test([10, 13], 12, 14, [10, 14]); |
|
321 test([10, 13], 12, 15, [10, 15]); |
|
322 test([10, 13], 12, 16, [10, 16]); |
|
323 test([10, 13], 13, 14, [10, 14]); |
|
324 test([10, 13], 13, 15, [10, 15]); |
|
325 test([10, 13], 13, 16, [10, 16]); |
|
326 test([10, 13], 14, 15, [10, 13, 14, 15]); |
|
327 test([10, 13], 14, 16, [10, 13, 14, 16]); |
|
328 test([10, 13], 15, 16, [10, 13, 15, 16]); |
|
329 |
|
330 test([10, 13, 14, 17], 7, 8, [ 7, 8, 10, 13, 14, 17]); |
|
331 test([10, 13, 14, 17], 7, 9, [ 7, 9, 10, 13, 14, 17]); |
|
332 test([10, 13, 14, 17], 7, 10, [ 7, 13, 14, 17]); |
|
333 test([10, 13, 14, 17], 7, 11, [ 7, 13, 14, 17]); |
|
334 test([10, 13, 14, 17], 7, 12, [ 7, 13, 14, 17]); |
|
335 test([10, 13, 14, 17], 7, 13, [ 7, 13, 14, 17]); |
|
336 test([10, 13, 14, 17], 7, 14, [ 7, 17]); |
|
337 test([10, 13, 14, 17], 7, 15, [ 7, 17]); |
|
338 test([10, 13, 14, 17], 7, 16, [ 7, 17]); |
|
339 test([10, 13, 14, 17], 7, 17, [ 7, 17]); |
|
340 test([10, 13, 14, 17], 7, 18, [ 7, 18]); |
|
341 test([10, 13, 14, 17], 7, 19, [ 7, 19]); |
|
342 test([10, 13, 14, 17], 8, 9, [ 8, 9, 10, 13, 14, 17]); |
|
343 test([10, 13, 14, 17], 8, 10, [ 8, 13, 14, 17]); |
|
344 test([10, 13, 14, 17], 8, 11, [ 8, 13, 14, 17]); |
|
345 test([10, 13, 14, 17], 8, 12, [ 8, 13, 14, 17]); |
|
346 test([10, 13, 14, 17], 8, 13, [ 8, 13, 14, 17]); |
|
347 test([10, 13, 14, 17], 8, 14, [ 8, 17]); |
|
348 test([10, 13, 14, 17], 8, 15, [ 8, 17]); |
|
349 test([10, 13, 14, 17], 8, 16, [ 8, 17]); |
|
350 test([10, 13, 14, 17], 8, 17, [ 8, 17]); |
|
351 test([10, 13, 14, 17], 8, 18, [ 8, 18]); |
|
352 test([10, 13, 14, 17], 8, 19, [ 8, 19]); |
|
353 test([10, 13, 14, 17], 9, 10, [ 9, 13, 14, 17]); |
|
354 test([10, 13, 14, 17], 9, 11, [ 9, 13, 14, 17]); |
|
355 test([10, 13, 14, 17], 9, 12, [ 9, 13, 14, 17]); |
|
356 test([10, 13, 14, 17], 9, 13, [ 9, 13, 14, 17]); |
|
357 test([10, 13, 14, 17], 9, 14, [ 9, 17]); |
|
358 test([10, 13, 14, 17], 9, 15, [ 9, 17]); |
|
359 test([10, 13, 14, 17], 9, 16, [ 9, 17]); |
|
360 test([10, 13, 14, 17], 9, 17, [ 9, 17]); |
|
361 test([10, 13, 14, 17], 9, 18, [ 9, 18]); |
|
362 test([10, 13, 14, 17], 9, 19, [ 9, 19]); |
|
363 test([10, 13, 14, 17], 10, 11, [10, 13, 14, 17]); |
|
364 test([10, 13, 14, 17], 10, 12, [10, 13, 14, 17]); |
|
365 test([10, 13, 14, 17], 10, 13, [10, 13, 14, 17]); |
|
366 test([10, 13, 14, 17], 10, 14, [10, 17]); |
|
367 test([10, 13, 14, 17], 10, 15, [10, 17]); |
|
368 test([10, 13, 14, 17], 10, 16, [10, 17]); |
|
369 test([10, 13, 14, 17], 10, 17, [10, 17]); |
|
370 test([10, 13, 14, 17], 10, 18, [10, 18]); |
|
371 test([10, 13, 14, 17], 10, 19, [10, 19]); |
|
372 test([10, 13, 14, 17], 11, 12, [10, 13, 14, 17]); |
|
373 test([10, 13, 14, 17], 11, 13, [10, 13, 14, 17]); |
|
374 test([10, 13, 14, 17], 11, 14, [10, 17]); |
|
375 test([10, 13, 14, 17], 11, 15, [10, 17]); |
|
376 test([10, 13, 14, 17], 11, 16, [10, 17]); |
|
377 test([10, 13, 14, 17], 11, 17, [10, 17]); |
|
378 test([10, 13, 14, 17], 11, 18, [10, 18]); |
|
379 test([10, 13, 14, 17], 11, 19, [10, 19]); |
|
380 test([10, 13, 14, 17], 12, 13, [10, 13, 14, 17]); |
|
381 test([10, 13, 14, 17], 12, 14, [10, 17]); |
|
382 test([10, 13, 14, 17], 12, 15, [10, 17]); |
|
383 test([10, 13, 14, 17], 12, 16, [10, 17]); |
|
384 test([10, 13, 14, 17], 12, 17, [10, 17]); |
|
385 test([10, 13, 14, 17], 12, 18, [10, 18]); |
|
386 test([10, 13, 14, 17], 12, 19, [10, 19]); |
|
387 test([10, 13, 14, 17], 13, 14, [10, 17]); |
|
388 test([10, 13, 14, 17], 13, 15, [10, 17]); |
|
389 test([10, 13, 14, 17], 13, 16, [10, 17]); |
|
390 test([10, 13, 14, 17], 13, 17, [10, 17]); |
|
391 test([10, 13, 14, 17], 13, 18, [10, 18]); |
|
392 test([10, 13, 14, 17], 13, 19, [10, 19]); |
|
393 test([10, 13, 14, 17], 14, 15, [10, 13, 14, 17]); |
|
394 test([10, 13, 14, 17], 14, 16, [10, 13, 14, 17]); |
|
395 test([10, 13, 14, 17], 14, 17, [10, 13, 14, 17]); |
|
396 test([10, 13, 14, 17], 14, 18, [10, 13, 14, 18]); |
|
397 test([10, 13, 14, 17], 14, 19, [10, 13, 14, 19]); |
|
398 test([10, 13, 14, 17], 15, 16, [10, 13, 14, 17]); |
|
399 test([10, 13, 14, 17], 15, 17, [10, 13, 14, 17]); |
|
400 test([10, 13, 14, 17], 15, 18, [10, 13, 14, 18]); |
|
401 test([10, 13, 14, 17], 15, 19, [10, 13, 14, 19]); |
|
402 test([10, 13, 14, 17], 16, 17, [10, 13, 14, 17]); |
|
403 test([10, 13, 14, 17], 16, 18, [10, 13, 14, 18]); |
|
404 test([10, 13, 14, 17], 16, 19, [10, 13, 14, 19]); |
|
405 test([10, 13, 14, 17], 17, 18, [10, 13, 14, 18]); |
|
406 test([10, 13, 14, 17], 17, 19, [10, 13, 14, 19]); |
|
407 test([10, 13, 14, 17], 18, 19, [10, 13, 14, 17, 18, 19]); |
|
408 |
|
409 test([10, 13, 16, 19], 7, 14, [ 7, 14, 16, 19]); |
|
410 test([10, 13, 16, 19], 7, 15, [ 7, 15, 16, 19]); |
|
411 test([10, 13, 16, 19], 7, 16, [ 7, 19]); |
|
412 test([10, 13, 16, 19], 8, 14, [ 8, 14, 16, 19]); |
|
413 test([10, 13, 16, 19], 8, 15, [ 8, 15, 16, 19]); |
|
414 test([10, 13, 16, 19], 8, 16, [ 8, 19]); |
|
415 test([10, 13, 16, 19], 9, 14, [ 9, 14, 16, 19]); |
|
416 test([10, 13, 16, 19], 9, 15, [ 9, 15, 16, 19]); |
|
417 test([10, 13, 16, 19], 9, 16, [ 9, 19]); |
|
418 test([10, 13, 16, 19], 10, 14, [10, 14, 16, 19]); |
|
419 test([10, 13, 16, 19], 10, 15, [10, 15, 16, 19]); |
|
420 test([10, 13, 16, 19], 10, 16, [10, 19]); |
|
421 test([10, 13, 16, 19], 11, 14, [10, 14, 16, 19]); |
|
422 test([10, 13, 16, 19], 11, 15, [10, 15, 16, 19]); |
|
423 test([10, 13, 16, 19], 11, 16, [10, 19]); |
|
424 test([10, 13, 16, 19], 12, 14, [10, 14, 16, 19]); |
|
425 test([10, 13, 16, 19], 12, 15, [10, 15, 16, 19]); |
|
426 test([10, 13, 16, 19], 12, 16, [10, 19]); |
|
427 test([10, 13, 16, 19], 13, 14, [10, 14, 16, 19]); |
|
428 test([10, 13, 16, 19], 13, 15, [10, 15, 16, 19]); |
|
429 test([10, 13, 16, 19], 13, 16, [10, 19]); |
|
430 test([10, 13, 16, 19], 14, 15, [10, 13, 14, 15, 16, 19]); |
|
431 test([10, 13, 16, 19], 14, 16, [10, 13, 14, 19]); |
|
432 test([10, 13, 16, 19], 15, 16, [10, 13, 15, 19]); |
|
433 |
|
434 run_next_test(); |
|
435 }); |
|
436 |