discombobulator 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,495 +0,0 @@
1
- // symmetricdifference.mjs
2
- //
3
- // Tests for symmetricdifference.
4
-
5
- import { expect, expectException } from "./testing.mjs";
6
-
7
- import { Instruments } from "../instrument.mjs";
8
- import { Set } from "../set.mjs";
9
- import { InstrumentSet } from "../instrumentset.mjs";
10
-
11
- export const test = {
12
- tests: [
13
- {
14
- title: "default constructor results in correct set",
15
- test: () => {
16
- const set1 = new InstrumentSet();
17
- const set2 = new InstrumentSet();
18
-
19
- let operator = new Set.SymmetricDifference(set1, set2);
20
-
21
- expect(operator.isAbstract, true);
22
- expect(operator.allowDuplicates, false);
23
- expect(operator.isStrict, true);
24
- },
25
- },
26
-
27
- {
28
- title: "add element fails because symmetric difference is an immutable set",
29
- test: () => {
30
- const set1 = new InstrumentSet();
31
- const set2 = new InstrumentSet();
32
-
33
- let operator = new Set.SymmetricDifference(set1, set2);
34
-
35
- expectException(() => {
36
- operator.add(Instruments.Snare);
37
- }, Error);
38
- },
39
- },
40
-
41
- {
42
- title: "iterator yields nothing for an empty set",
43
- test: () => {
44
- const set1 = new InstrumentSet({ add: Instruments.Snare });
45
- const set2 = new InstrumentSet({ add: Instruments.Snare });
46
-
47
- const operator = new Set.SymmetricDifference(set1, set2);
48
-
49
- let count = 0;
50
-
51
- for (const e of operator) { ++count; }
52
-
53
- expect(count, 0);
54
- },
55
- },
56
- {
57
- title: "iterator yields correct results for a non-empty set",
58
- test: () => {
59
- const instruments = [
60
- Instruments.Snare,
61
- Instruments.Crash,
62
- Instruments.Claves,
63
- Instruments.Bass1,
64
- ];
65
- const set1 = new InstrumentSet({
66
- add: instruments,
67
- });
68
- const set2 = new InstrumentSet({
69
- add: [Instruments.Snare, Instruments.Bass1],
70
- });
71
-
72
- const operator = new Set.Difference(set1, set2);
73
- let count = 0;
74
-
75
- for (const e of operator) {
76
- expect(e, (result) => { return result === instruments[1+count++]; });
77
- }
78
-
79
- expect(count, 2);
80
- },
81
- },
82
-
83
- {
84
- title: "size returns correct size with no different elements",
85
- test: () => {
86
- const set1 = new InstrumentSet({ add: Instruments.Snare });
87
- const set2 = new InstrumentSet({ add: Instruments.Snare });
88
-
89
- const operator = new Set.SymmetricDifference(set1, set2);
90
-
91
- expect(operator.size === 0, true);
92
- },
93
- },
94
- {
95
- title: "size returns correct size with a single different element",
96
- test: () => {
97
- const set1 = new InstrumentSet({
98
- add: [Instruments.Snare, Instruments.Bass1],
99
- });
100
- const set2 = new InstrumentSet({ add: Instruments.Snare });
101
-
102
- const operator = new Set.SymmetricDifference(set1, set2);
103
-
104
- expect(operator.size === 1, true);
105
- },
106
- },
107
- {
108
- title: "size returns correct size with multiple different elements",
109
- test: () => {
110
- const set1 = new InstrumentSet({
111
- add: [
112
- Instruments.Snare,
113
- Instruments.Crash,
114
- Instruments.Claves,
115
- Instruments.Bass1,
116
- ],
117
- });
118
- const set2 = new InstrumentSet({
119
- add: [Instruments.Snare, Instruments.Bass1],
120
- });
121
-
122
- const operator = new Set.SymmetricDifference(set1, set2);
123
-
124
- expect(operator.size === 2, true);
125
- },
126
- },
127
-
128
- {
129
- title: "has fails when empty",
130
- test: () => {
131
- const set1 = new InstrumentSet({ add: Instruments.Snare });
132
- const set2 = new InstrumentSet({ add: Instruments.Snare });
133
-
134
- const operator = new Set.SymmetricDifference(set1, set2);
135
-
136
- expect(operator.size === 0, true);
137
- expect(operator.has(Instruments.Snare), false);
138
- },
139
- },
140
- {
141
- title: "has succeeds for element that is in difference",
142
- test: () => {
143
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Bass1 ] });
144
- let set2 = new InstrumentSet({ add: [ Instruments.Bass1 ] });
145
-
146
- const operator = new Set.SymmetricDifference(set1, set2);
147
-
148
- expect(operator.size === 1, true);
149
- expect(operator.has(Instruments.Snare), true);
150
- },
151
- },
152
- {
153
- title: "has fails for element that is not in difference",
154
- test: () => {
155
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Bass1 ] });
156
- let set2 = new InstrumentSet({ add: [ Instruments.Bass1 ] });
157
-
158
- const operator = new Set.SymmetricDifference(set1, set2);
159
-
160
- expect(operator.size === 1, true);
161
- expect(operator.has(Instruments.Bass1), false);
162
- },
163
- },
164
- {
165
- title: "has succeeds for set that is in difference",
166
- test: () => {
167
- let subset = new InstrumentSet({ add: [ Instruments.Bass1, Instruments.Snare ]});
168
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
169
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
170
-
171
- const operator = new Set.SymmetricDifference(set1, set2);
172
-
173
- expect(operator.size === 3, true);
174
- expect(operator.has(subset), true);
175
- },
176
- },
177
- {
178
- title: "has fails for other set that is not in difference",
179
- test: () => {
180
- let subset = new InstrumentSet({ add: [ Instruments.Claves, Instruments.Crash ]});
181
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
182
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
183
-
184
- const operator = new Set.SymmetricDifference(set1, set2);
185
-
186
- expect(operator.size === 3, true);
187
- expect(operator.has(subset), false);
188
- },
189
- },
190
-
191
- {
192
- title: "indexOf throws error for undefined element",
193
- test: () => {
194
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
195
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
196
-
197
- const operator = new Set.SymmetricDifference(set1, set2);
198
-
199
- expect(operator.size === 3, true);
200
- expectException(() => { operator.indexOf(); }, Error);
201
- },
202
- },
203
- {
204
- title: "indexOf throws error for argument not derived from Element",
205
- test: () => {
206
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
207
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
208
-
209
- const operator = new Set.SymmetricDifference(set1, set2);
210
-
211
- expect(operator.size === 3, true);
212
- expectException(() => { operator.indexOf(new Error()); }, Error);
213
- },
214
- },
215
- {
216
- title: "indexOf fails to find non-existant element",
217
- test: () => {
218
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
219
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
220
-
221
- const operator = new Set.SymmetricDifference(set1, set2);
222
-
223
- expect(operator.size === 3, true);
224
- expect(operator.indexOf(Instruments.Claves), -1);
225
- },
226
- },
227
- {
228
- title: "indexOf fails for empty set",
229
- test: () => {
230
- let set1 = new InstrumentSet({ add: [ Instruments.Claves, Instruments.Crash ] });
231
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
232
-
233
- const operator = new Set.SymmetricDifference(set1, set2);
234
-
235
- expect(operator.size === 0, true);
236
- expect(operator.indexOf(Instruments.Bass1), -1);
237
- },
238
- },
239
- {
240
- title: "indexOf succeeds for element in the set",
241
- test: () => {
242
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
243
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
244
-
245
- const operator = new Set.SymmetricDifference(set1, set2);
246
-
247
- expect(operator.size === 3, true);
248
- expect(operator.indexOf(Instruments.Snare), 0);
249
- expect(operator.indexOf(Instruments.Bass1), 1);
250
- expect(operator.indexOf(Instruments.Crash), 2);
251
- },
252
- },
253
- {
254
- title: "indexOf fails for element in the set prior to after",
255
- test: () => {
256
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
257
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
258
-
259
- const operator = new Set.SymmetricDifference(set1, set2);
260
-
261
- expect(operator.size === 3, true);
262
- expect(operator.indexOf(Instruments.Snare, 0), -1);
263
- },
264
- },
265
- {
266
- title: "indexOf succeeds for element in the set later than after",
267
- test: () => {
268
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
269
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
270
-
271
- const operator = new Set.SymmetricDifference(set1, set2);
272
-
273
- expect(operator.size === 3, true);
274
- expect(operator.indexOf(Instruments.Bass1, 0), 1);
275
- },
276
- },
277
- {
278
- title: "indexOf fails if after >= size-1",
279
- test: () => {
280
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
281
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
282
-
283
- const operator = new Set.SymmetricDifference(set1, set2);
284
-
285
- expect(operator.size === 3, true);
286
- expect(operator.indexOf(Instruments.Bass1, 1), -1);
287
- expect(operator.indexOf(Instruments.Bass1, 2), -1);
288
- expect(operator.indexOf(Instruments.Bass1, 3), -1);
289
- },
290
- },
291
-
292
- {
293
- title: "elementAt throws error for index < 0",
294
- test: () => {
295
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
296
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
297
-
298
- const operator = new Set.SymmetricDifference(set1, set2);
299
-
300
- expect(operator.size === 3, true);
301
- expectException(() => { operator.elementAt(-1); }, Error);
302
- },
303
- },
304
- {
305
- title: "elementAt throws error for empty set",
306
- test: () => {
307
- let set1 = new InstrumentSet({ add: [ Instruments.Claves, Instruments.Crash ] });
308
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
309
-
310
- const operator = new Set.SymmetricDifference(set1, set2);
311
-
312
- expect(operator.size === 0, true);
313
- expectException(() => { operator.elementAt(0); }, Error);
314
- },
315
- },
316
- {
317
- title: "elementAt throws error for index >= set size",
318
- test: () => {
319
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
320
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
321
-
322
- const operator = new Set.SymmetricDifference(set1, set2);
323
-
324
- expect(operator.size === 3, true);
325
- expectException(() => { operator.elementAt(3); }, Error);
326
- },
327
- },
328
- {
329
- title: "elementAt succeeds for element in valid index",
330
- test: () => {
331
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
332
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
333
-
334
- const operator = new Set.SymmetricDifference(set1, set2);
335
-
336
- expect(operator.size === 3, true);
337
- expect(operator.elementAt(0), (result) => { return result === Instruments.Snare; });
338
- expect(operator.elementAt(1), (result) => { return result === Instruments.Bass1; });
339
- expect(operator.elementAt(2), (result) => { return result === Instruments.Crash; });
340
- },
341
- },
342
-
343
- {
344
- title: "clone succeeds on a difference operator (Shallow)",
345
- test: () => {
346
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
347
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
348
-
349
- const operator = new Set.SymmetricDifference(set1, set2);
350
-
351
- expect(operator.size === 3, true);
352
-
353
- const clone = operator.clone();
354
-
355
- expect(clone.isAbstract, true);
356
- expect(clone.allowDuplicates, false);
357
- expect(clone.isStrict, true);
358
- expect(clone.skipValidation, false);
359
- expect(clone.elements[0] === set1, true);
360
- expect(clone.elements[1] === set2, true);
361
-
362
- let index = 0;
363
-
364
- for (let e of operator) {
365
- expect(e.isEqual(clone.elementAt(index++)), true);
366
- }
367
- },
368
- },
369
- {
370
- title: "clone succeeds on a difference operator (Deep)",
371
- test: () => {
372
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
373
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
374
-
375
- const operator = new Set.SymmetricDifference(set1, set2);
376
-
377
- expect(operator.size === 3, true);
378
-
379
- const clone = operator.clone(true);
380
-
381
- expect(clone.isAbstract, true);
382
- expect(clone.allowDuplicates, false);
383
- expect(clone.isStrict, true);
384
- expect(clone.skipValidation, false);
385
- expect(clone.elements[0] !== set1, true);
386
- expect(clone.elements[1] !== set2, true);
387
-
388
- let index = 0;
389
-
390
- for (let e of operator) {
391
- expect(e.isEqual(clone.elementAt(index++)), true);
392
- }
393
- },
394
- },
395
-
396
- {
397
- title: "isDisjointFrom fails for difference set that is not disjoint from another set",
398
- test: () => {
399
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Crash ]});
400
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
401
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
402
-
403
- const operator = new Set.SymmetricDifference(set1, set2);
404
-
405
- expect(operator.isDisjointFrom(set), false);
406
- },
407
- },
408
- {
409
- title: "isDisjointFrom succeeds for difference set that is disjoint from another set",
410
- test: () => {
411
- let set = new InstrumentSet({ add: [ Instruments.Claves, Instruments.Crash ]});
412
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
413
- let set2 = new InstrumentSet({ add: [ Instruments.China, Instruments.Claves ] });
414
-
415
- const operator = new Set.SymmetricDifference(set1, set2);
416
-
417
- expect(operator.isDisjointFrom(set), true);
418
- },
419
- },
420
- {
421
- title: "isDisjointFrom fails for a set that is not disjoint from a difference set",
422
- test: () => {
423
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Crash ]});
424
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
425
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
426
-
427
- const operator = new Set.SymmetricDifference(set1, set2);
428
-
429
- expect(set.isDisjointFrom(operator), false);
430
- },
431
- },
432
- {
433
- title: "isDisjointFrom succeeds for a set that is disjoint from a difference set",
434
- test: () => {
435
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.China ]});
436
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Crash, Instruments.Bass1 ] });
437
- let set2 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves ] });
438
-
439
- const operator = new Set.SymmetricDifference(set1, set2);
440
-
441
- expect(set.isDisjointFrom(operator), true);
442
- },
443
- },
444
-
445
- {
446
- title: "isSubsetOf fails for difference set that is not a subset of another set",
447
- test: () => {
448
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Crash ]});
449
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
450
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
451
-
452
- const operator = new Set.SymmetricDifference(set1, set2);
453
-
454
- expect(operator.isSubsetOf(set), false);
455
- },
456
- },
457
- {
458
- title: "isSubsetOf succeeds for difference set that is subset of another set",
459
- test: () => {
460
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Bass1, Instruments.Crash, Instruments.Bass1 ]});
461
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
462
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
463
-
464
- const operator = new Set.SymmetricDifference(set1, set2);
465
-
466
- expect(operator.isSubsetOf(set), true);
467
- },
468
- },
469
- {
470
- title: "isSubsetOf fails for a set that is not a subset of a difference set",
471
- test: () => {
472
- let set = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Crash ]});
473
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves, Instruments.Bass1 ] });
474
- let set2 = new InstrumentSet({ add: [ Instruments.Crash, Instruments.Claves ] });
475
-
476
- const operator = new Set.SymmetricDifference(set1, set2);
477
-
478
- expect(set.isSubsetOf(operator), false);
479
- },
480
- },
481
- {
482
- title: "isSubsetOf succeeds for a set that is a subset of a difference set",
483
- test: () => {
484
- let set = new InstrumentSet({ add: [ Instruments.Bass1, Instruments.Crash ]});
485
- let set1 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Crash, Instruments.Bass1 ] });
486
- let set2 = new InstrumentSet({ add: [ Instruments.Snare, Instruments.Claves ] });
487
-
488
- const operator = new Set.SymmetricDifference(set1, set2);
489
-
490
- expect(set.isSubsetOf(operator), true);
491
- },
492
- },
493
-
494
- ],
495
- };
package/src/test/test.mjs DELETED
@@ -1,208 +0,0 @@
1
- // test.mjs
2
- //
3
- // Script to run test suite.
4
-
5
- import { program } from "commander";
6
-
7
- import con from "./concolour.mjs";
8
- import { TestExpectationFailed, TestExceptionFailed } from "./testing.mjs";
9
-
10
- program
11
- .version("1.0.0")
12
- .description("Run test harness for DISCOmbobulator")
13
- .option("-s, --skip-slow", "skip slow tests", false)
14
- .option("-S, --slow", "only perform slow tests", false)
15
- .option("-v, --verbose", "verbose output instead of just summary", false)
16
- .option("-i, --ignore-skipped", "ignores skipped tests in verbose output", false)
17
- .option("-m, --modules <modules...>", "test specified module(s) only");
18
-
19
- program.parse();
20
-
21
- const options = program.opts();
22
-
23
- const log = {
24
- message: (message, options = {}) =>
25
- con.log(message, con.fg.white, "", options),
26
- error: (message, options = {}) =>
27
- con.log(message, con.fg.gray, con.bg.red, options),
28
- warning: (message, options = {}) =>
29
- con.log(message, con.fg.yellow, "", options),
30
- title: (message, options = {}) =>
31
- con.log(message, con.fg.magenta, "", options),
32
- heading1: (message, options = {}) =>
33
- con.log(message, con.fg.brightblue, con.bg.blue, options),
34
- heading2: (message, options = {}) =>
35
- con.log(message, con.fg.blue, "", options),
36
- success: (message, options = {}) =>
37
- con.log(message, con.fg.brightgreen, "", options),
38
- failure: (message, options = {}) => con.log(message, con.fg.red, "", options),
39
- skipped: (message, options = {}) =>
40
- con.log(message, con.fg.brightmagenta, "", options),
41
- };
42
-
43
- function pad(num) {
44
- return String(num).padStart(2, "0");
45
- }
46
-
47
- (async (defs) => {
48
- const start = new Date();
49
-
50
- let moduleCount = 0;
51
- let testCount = 0;
52
- let testID = 0;
53
- let failCount = 0;
54
- let skipCount = 0;
55
- let testPrefix = "";
56
-
57
- let failedTests = [];
58
-
59
- log.title(`Discombobulator test suite started`);
60
- console.log(defs);
61
-
62
- for (let module of defs) {
63
- if (options.modules === undefined || options.modules.includes(module)) {
64
- const path = `./${module}.mjs`;
65
-
66
- if (options.verbose) log.heading1(`Starting module ${++moduleCount}: ${module}`);
67
-
68
- try {
69
- const testModule = (await import(path))["test"];
70
- const tests = testModule.tests;
71
-
72
- if (tests === undefined || !Array.isArray(tests) || tests.length < 1) {
73
- log.warning("No tests found");
74
- } else {
75
- // Got the array of tests, process them individually.
76
- for (let testdef of tests) {
77
- const { title, test, slow, skip } = testdef;
78
-
79
- testPrefix = `Test ${++testID}: `;
80
- testPrefix = title !== undefined
81
- ? `${testPrefix}${title}...`
82
- : `${testPrefix}Untitled test...`;
83
-
84
- if (options.skipSlow && slow !== undefined && slow) {
85
- if (options.verbose && !options.ignoreSkipped) {
86
- log.heading2(testPrefix, { prefix: true });
87
- log.skipped("Skipped - slow", { suffix: true });
88
- }
89
-
90
- ++skipCount;
91
- } else if (options.slow && (slow === undefined || !slow)) {
92
- if (options.verbose && !options.ignoreSkipped) {
93
- log.heading2(testPrefix, { prefix: true });
94
- log.skipped("Skipped - not slow", { suffix: true });
95
- }
96
-
97
- ++skipCount;
98
- } else if (skip !== undefined && skip) {
99
- if (options.verbose && !options.ignoreSkipped) {
100
- log.heading2(testPrefix, { prefix: true });
101
- log.skipped("Skipped - explicitly skipped at source", { suffix: true });
102
- }
103
-
104
- ++skipCount;
105
- } else {
106
- if (options.verbose) log.heading2(testPrefix, { prefix: true });
107
- ++testCount;
108
-
109
- try {
110
- test();
111
-
112
- if (options.verbose) log.success("OK", { suffix: true });
113
- } catch (e) {
114
- ++failCount;
115
-
116
- let message = "";
117
-
118
- if (e instanceof TestExpectationFailed) {
119
- message = e;
120
- } else if (e instanceof TestExceptionFailed) {
121
- message = e;
122
- } else {
123
- message = `Unknown Exception: ${e}`;
124
- }
125
-
126
- if (failedTests[module] === undefined) {
127
- failedTests[module] = [ `${testPrefix}${message}` ];
128
- } else {
129
- failedTests[module].push(`${testPrefix}${message}`);
130
- }
131
-
132
- if (options.verbose) log.failure(message, { suffix: true });
133
- }
134
- }
135
- }
136
- }
137
- } catch (e) {
138
- console.log(`FAILED: ${module} - ${path}`);
139
- console.log(e);
140
-
141
- log.error("Module not found");
142
- }
143
- }
144
- }
145
-
146
- const elapsed = Date.now() - start;
147
-
148
- const hours = Math.floor(elapsed / 3600000);
149
- const minutes = Math.floor(elapsed / 60000);
150
- const seconds = Math.floor(elapsed / 1000);
151
-
152
- log.title(`Discombobulator test suite finished`);
153
- log.title(`Test duration: ${hours}:${pad(minutes)}:${pad(seconds)}`);
154
- log.title(`Modules tested: ${moduleCount}`);
155
- log.title(`Tests performed: ${testCount}`);
156
-
157
- if (skipCount > 0) {
158
- log.title(`Tests skipped: ${skipCount}`);
159
- }
160
-
161
- if (failCount > 0) {
162
- log.failure(`Failed tests: ${failCount}`);
163
- } else if (testCount > 0) {
164
- log.success("All tests passed!");
165
- } else {
166
- log.warning("No tests performed");
167
- }
168
-
169
- if (failCount > 0) {
170
- log.failure('Failure summary:');
171
-
172
- for (let module in failedTests) {
173
- log.heading1(`Module: ${module}`);
174
-
175
- for (let failure of failedTests[module]) {
176
- log.failure(failure);
177
- }
178
- }
179
- }
180
- })([
181
- // moduleName of the test modules to be run.
182
-
183
- "element",
184
- "instrument",
185
- "articulation",
186
- "group",
187
- "set",
188
- "instrumentset",
189
- "articulationset",
190
- "note",
191
- "patternsource",
192
- "noteset",
193
- "chord",
194
- "pattern",
195
- "patternset",
196
- "groupset",
197
- "regulargroupset",
198
- "irregulargroupset",
199
- "schedule",
200
- "schema",
201
- "operator",
202
- "binaryoperator",
203
- "difference",
204
- "intersection",
205
- "rotation",
206
- "symmetricdifference",
207
- "union",
208
- ]);