@benev/tact 0.1.0 → 0.1.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benev/tact",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "keybindings and gamepad support for web games",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -54,11 +54,12 @@ export const lensAlgo = (
54
54
 
55
55
  const isFreshlyPressed = !isPressed(state.lastValue) && isPressed(value)
56
56
  const isFreshlyReleased = isPressed(state.lastValue) && !isPressed(value)
57
- const isHolding = (now - state.holdStart) >= holdTime
58
57
 
59
58
  if (isFreshlyPressed)
60
59
  state.holdStart = now
61
60
 
61
+ const isHolding = (now - state.holdStart) >= holdTime
62
+
62
63
  state.lastValue = value
63
64
 
64
65
  switch (settings.timing[0]) {
@@ -6,16 +6,16 @@ import {testPlug, testSetupAlpha, testSetupBravo} from "./testing/testing.js"
6
6
 
7
7
  export default Science.suite({
8
8
  "sample to action value": test(async() => {
9
- const {time, device, resolve} = testSetupAlpha()
9
+ const {clock, device, resolve} = testSetupAlpha()
10
10
  {
11
- time.frame = 1
11
+ clock.frame = 1
12
12
  device.setSample("Space", 1)
13
13
  const actions = resolve()
14
14
  expect(actions.basic.jump.value).is(1)
15
15
  expect(actions.basic.shoot.value).is(0)
16
16
  }
17
17
  {
18
- time.frame = 2
18
+ clock.frame = 2
19
19
  device.setSample("Space", 2)
20
20
  device.setSample("pointer.button.left", 3)
21
21
  const actions = resolve()
@@ -24,97 +24,128 @@ export default Science.suite({
24
24
  }
25
25
  }),
26
26
 
27
- "hold timing": test(async() => {
28
- const {time, device, resolve} = testSetupAlpha()
29
- {
30
- time.frame = 1
31
- device.setSample("KeyG", 0)
32
- const actions = resolve()
33
- expect(actions.basic.grenade.value).is(0)
34
- }
35
- {
36
- time.frame = 2
37
- device.setSample("KeyG", 1)
38
- const actions = resolve()
39
- expect(actions.basic.grenade.value).is(0)
40
- }
41
- {
42
- time.frame = 15
43
- device.setSample("KeyG", 1)
44
- const actions = resolve()
45
- expect(actions.basic.grenade.value).is(1)
27
+ "hold timing and behavior": test(async() => {
28
+ const {clock, device, resolve, actions} = testSetupAlpha()
29
+ const proceed = (options: {time: number, value: number}) => {
30
+ clock.time = options.time
31
+ device.setSample("KeyG", options.value)
32
+ resolve()
46
33
  }
34
+
35
+ let count = 0
36
+ actions.basic.grenade.onDown(() => { count++ })
37
+ const getValue = () => actions.basic.grenade.value
38
+
39
+ // start doing nothing
40
+ proceed({time: 0, value: 0})
41
+ expect(getValue()).is(0)
42
+ expect(count).is(0)
43
+
44
+ // start holding
45
+ proceed({time: 10, value: 1})
46
+ expect(getValue()).is(0)
47
+ expect(count).is(0)
48
+
49
+ // keep holding
50
+ proceed({time: 20, value: 1})
51
+ expect(getValue()).is(0)
52
+ expect(count).is(0)
53
+
54
+ // held long enough to trigger down
55
+ proceed({time: 210, value: 1})
56
+ expect(getValue()).is(1)
57
+ expect(count).is(1)
58
+
59
+ // release, shouldn't trigger new down
60
+ proceed({time: 220, value: 0})
61
+ expect(getValue()).is(0)
62
+ expect(count).is(1)
63
+
64
+ // start holding again
65
+ proceed({time: 230, value: 1})
66
+ expect(getValue()).is(0)
67
+ expect(count).is(1)
68
+
69
+ // keep holding again
70
+ proceed({time: 330, value: 1})
71
+ expect(getValue()).is(0)
72
+ expect(count).is(1)
73
+
74
+ // held long enough again to trigger down
75
+ proceed({time: 430, value: 1})
76
+ expect(getValue()).is(1)
77
+ expect(count).is(2)
47
78
  }),
48
79
 
49
80
  "hub": Science.suite({
50
81
  "device inputs work": test(async() => {
51
- const {hub, time} = testSetupBravo()
82
+ const {hub, clock} = testSetupBravo()
52
83
  const d1 = testPlug(hub, new SamplerDevice())
53
84
  d1.setSample("Space", 1)
54
- const [p1, p2] = hub.poll(time.now)
85
+ const [p1, p2] = hub.poll(clock.time)
55
86
  expect(p1.actions.basic.jump.value).is(1)
56
87
  expect(p2.actions.basic.jump.value).is(0)
57
88
  }),
58
89
 
59
90
  "reveal overlay works": test(async() => {
60
- const {hub, time} = testSetupBravo()
91
+ const {hub, clock} = testSetupBravo()
61
92
  const d1 = testPlug(hub, new SamplerDevice())
62
93
  d1.setSample("Backslash", 1)
63
- hub.poll(time.now)
94
+ hub.poll(clock.time)
64
95
  expect(hub.metaPort.actions[metaMode].revealOverlay.value)
65
96
  .is(1)
66
97
  }),
67
98
 
68
99
  "two devices playing on separate ports": test(async() => {
69
- const {hub, time} = testSetupBravo()
100
+ const {hub, clock} = testSetupBravo()
70
101
  const c1 = testPlug(hub, new SamplerDevice())
71
102
  const c2 = testPlug(hub, new SamplerDevice())
72
103
  c1.setSample("Space", 1)
73
104
  c2.setSample("Space", 2)
74
- const [p1, p2] = hub.poll(time.now)
105
+ const [p1, p2] = hub.poll(clock.time)
75
106
  expect(p1.actions.basic.jump.value).is(1)
76
107
  expect(p2.actions.basic.jump.value).is(2)
77
108
  }),
78
109
 
79
110
  "device can shimmy": test(async() => {
80
- const {hub, time} = testSetupBravo()
111
+ const {hub, clock} = testSetupBravo()
81
112
  const c1 = testPlug(hub, new SamplerDevice())
82
113
  hub.shimmy(c1, 1)
83
114
  c1.setSample("Space", 1)
84
- const [p1, p2] = hub.poll(time.now)
115
+ const [p1, p2] = hub.poll(clock.time)
85
116
  expect(p1.actions.basic.jump.value).is(0)
86
117
  expect(p2.actions.basic.jump.value).is(1)
87
118
  }),
88
119
 
89
120
  "two devices can share a port": test(async() => {
90
- const {hub, time} = testSetupBravo()
121
+ const {hub, clock} = testSetupBravo()
91
122
  const c1 = testPlug(hub, new SamplerDevice())
92
123
  const c2 = testPlug(hub, new SamplerDevice())
93
124
  hub.shimmy(c2, -1)
94
125
  expect(hub.portByDevice(c1)).is(hub.portByDevice(c2))
95
126
  {
96
127
  c1.setSample("Space", 1)
97
- const [p1, p2] = hub.poll(time.now)
128
+ const [p1, p2] = hub.poll(clock.time)
98
129
  expect(p1.actions.basic.jump.value).is(1)
99
130
  expect(p2.actions.basic.jump.value).is(0)
100
131
  }
101
132
  {
102
133
  c2.setSample("Space", 1)
103
- const [p1, p2] = hub.poll(time.now)
134
+ const [p1, p2] = hub.poll(clock.time)
104
135
  expect(p1.actions.basic.jump.value).is(1)
105
136
  expect(p2.actions.basic.jump.value).is(0)
106
137
  }
107
138
  {
108
139
  c1.setSample("Space", 1)
109
140
  c2.setSample("Space", 2)
110
- const [p1, p2] = hub.poll(time.now)
141
+ const [p1, p2] = hub.poll(clock.time)
111
142
  expect(p1.actions.basic.jump.value).is(2)
112
143
  expect(p2.actions.basic.jump.value).is(0)
113
144
  }
114
145
  {
115
146
  c1.setSample("Space", 2)
116
147
  c2.setSample("Space", 1)
117
- const [p1, p2] = hub.poll(time.now)
148
+ const [p1, p2] = hub.poll(clock.time)
118
149
  expect(p1.actions.basic.jump.value).is(2)
119
150
  expect(p2.actions.basic.jump.value).is(0)
120
151
  }
@@ -2,16 +2,16 @@
2
2
  import {Hub} from "../hub/hub.js"
3
3
  import {Port} from "../hub/port.js"
4
4
  import {Device} from "../devices/device.js"
5
- import {asBindings, Code} from "../bindings/types.js"
6
5
  import {Resolver} from "../bindings/resolver.js"
7
6
  import {SampleMap} from "../bindings/sample-map.js"
7
+ import {asBindings, Code} from "../bindings/types.js"
8
8
  import {SamplerDevice} from "../devices/infra/sampler.js"
9
9
 
10
- export class TestTime {
11
- frame = 0
10
+ export class TestClock {
11
+ time = 0
12
12
 
13
- get now() {
14
- return (this.frame++) * (1000 / 60)
13
+ set frame(frame: number) {
14
+ this.time = frame * (1000 / 60)
15
15
  }
16
16
  }
17
17
 
@@ -31,26 +31,27 @@ export function testPlug<C extends Device>(hub: Hub<any>, device: C) {
31
31
  }
32
32
 
33
33
  export function testSetupAlpha() {
34
- const time = new TestTime()
34
+ const clock = new TestClock()
35
35
  const device = new SamplerDevice()
36
36
  const resolver = new Resolver(testBindings())
37
37
  const modes = new Set(Object.keys(resolver.bindings))
38
+ const actions = resolver.actions
38
39
  const resolve = () => resolver.resolve(
39
- time.now,
40
+ clock.time,
40
41
  modes as any,
41
42
  new SampleMap(device.samples())
42
43
  )
43
- return {device, resolver, resolve, time}
44
+ return {device, resolver, resolve, clock, actions}
44
45
  }
45
46
 
46
47
  export function testSetupBravo() {
47
- const time = new TestTime()
48
+ const clock = new TestClock()
48
49
  const port = () => {
49
50
  const port = new Port(testBindings())
50
51
  port.modes.adds("basic")
51
52
  return port
52
53
  }
53
54
  const hub = new Hub([port(), port(), port(), port()])
54
- return {hub, time}
55
+ return {hub, clock}
55
56
  }
56
57
 
@@ -32,9 +32,9 @@ export const lensAlgo = (now, state, v) => pipe(v).line(function clippings(value
32
32
  : settings.timing[1]) ?? defaultHoldTime;
33
33
  const isFreshlyPressed = !isPressed(state.lastValue) && isPressed(value);
34
34
  const isFreshlyReleased = isPressed(state.lastValue) && !isPressed(value);
35
- const isHolding = (now - state.holdStart) >= holdTime;
36
35
  if (isFreshlyPressed)
37
36
  state.holdStart = now;
37
+ const isHolding = (now - state.holdStart) >= holdTime;
38
38
  state.lastValue = value;
39
39
  switch (settings.timing[0]) {
40
40
  case "direct":
@@ -1 +1 @@
1
- {"version":3,"file":"lens-algo.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/lens-algo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lens-algo.js","sourceRoot":"","sources":["../../../../s/core/bindings/parts/lens-algo.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Science } from "@e280/science";
2
2
  declare const _default: {
3
3
  "sample to action value": Science.Test;
4
- "hold timing": Science.Test;
4
+ "hold timing and behavior": Science.Test;
5
5
  hub: {
6
6
  "device inputs work": Science.Test;
7
7
  "reveal overlay works": Science.Test;
@@ -4,16 +4,16 @@ import { SamplerDevice } from "./devices/infra/sampler.js";
4
4
  import { testPlug, testSetupAlpha, testSetupBravo } from "./testing/testing.js";
5
5
  export default Science.suite({
6
6
  "sample to action value": test(async () => {
7
- const { time, device, resolve } = testSetupAlpha();
7
+ const { clock, device, resolve } = testSetupAlpha();
8
8
  {
9
- time.frame = 1;
9
+ clock.frame = 1;
10
10
  device.setSample("Space", 1);
11
11
  const actions = resolve();
12
12
  expect(actions.basic.jump.value).is(1);
13
13
  expect(actions.basic.shoot.value).is(0);
14
14
  }
15
15
  {
16
- time.frame = 2;
16
+ clock.frame = 2;
17
17
  device.setSample("Space", 2);
18
18
  device.setSample("pointer.button.left", 3);
19
19
  const actions = resolve();
@@ -21,92 +21,114 @@ export default Science.suite({
21
21
  expect(actions.basic.shoot.value).is(3);
22
22
  }
23
23
  }),
24
- "hold timing": test(async () => {
25
- const { time, device, resolve } = testSetupAlpha();
26
- {
27
- time.frame = 1;
28
- device.setSample("KeyG", 0);
29
- const actions = resolve();
30
- expect(actions.basic.grenade.value).is(0);
31
- }
32
- {
33
- time.frame = 2;
34
- device.setSample("KeyG", 1);
35
- const actions = resolve();
36
- expect(actions.basic.grenade.value).is(0);
37
- }
38
- {
39
- time.frame = 15;
40
- device.setSample("KeyG", 1);
41
- const actions = resolve();
42
- expect(actions.basic.grenade.value).is(1);
43
- }
24
+ "hold timing and behavior": test(async () => {
25
+ const { clock, device, resolve, actions } = testSetupAlpha();
26
+ const proceed = (options) => {
27
+ clock.time = options.time;
28
+ device.setSample("KeyG", options.value);
29
+ resolve();
30
+ };
31
+ let count = 0;
32
+ actions.basic.grenade.onDown(() => { count++; });
33
+ const getValue = () => actions.basic.grenade.value;
34
+ // start doing nothing
35
+ proceed({ time: 0, value: 0 });
36
+ expect(getValue()).is(0);
37
+ expect(count).is(0);
38
+ // start holding
39
+ proceed({ time: 10, value: 1 });
40
+ expect(getValue()).is(0);
41
+ expect(count).is(0);
42
+ // keep holding
43
+ proceed({ time: 20, value: 1 });
44
+ expect(getValue()).is(0);
45
+ expect(count).is(0);
46
+ // held long enough to trigger down
47
+ proceed({ time: 210, value: 1 });
48
+ expect(getValue()).is(1);
49
+ expect(count).is(1);
50
+ // release, shouldn't trigger new down
51
+ proceed({ time: 220, value: 0 });
52
+ expect(getValue()).is(0);
53
+ expect(count).is(1);
54
+ // start holding again
55
+ proceed({ time: 230, value: 1 });
56
+ expect(getValue()).is(0);
57
+ expect(count).is(1);
58
+ // keep holding again
59
+ proceed({ time: 330, value: 1 });
60
+ expect(getValue()).is(0);
61
+ expect(count).is(1);
62
+ // held long enough again to trigger down
63
+ proceed({ time: 430, value: 1 });
64
+ expect(getValue()).is(1);
65
+ expect(count).is(2);
44
66
  }),
45
67
  "hub": Science.suite({
46
68
  "device inputs work": test(async () => {
47
- const { hub, time } = testSetupBravo();
69
+ const { hub, clock } = testSetupBravo();
48
70
  const d1 = testPlug(hub, new SamplerDevice());
49
71
  d1.setSample("Space", 1);
50
- const [p1, p2] = hub.poll(time.now);
72
+ const [p1, p2] = hub.poll(clock.time);
51
73
  expect(p1.actions.basic.jump.value).is(1);
52
74
  expect(p2.actions.basic.jump.value).is(0);
53
75
  }),
54
76
  "reveal overlay works": test(async () => {
55
- const { hub, time } = testSetupBravo();
77
+ const { hub, clock } = testSetupBravo();
56
78
  const d1 = testPlug(hub, new SamplerDevice());
57
79
  d1.setSample("Backslash", 1);
58
- hub.poll(time.now);
80
+ hub.poll(clock.time);
59
81
  expect(hub.metaPort.actions[metaMode].revealOverlay.value)
60
82
  .is(1);
61
83
  }),
62
84
  "two devices playing on separate ports": test(async () => {
63
- const { hub, time } = testSetupBravo();
85
+ const { hub, clock } = testSetupBravo();
64
86
  const c1 = testPlug(hub, new SamplerDevice());
65
87
  const c2 = testPlug(hub, new SamplerDevice());
66
88
  c1.setSample("Space", 1);
67
89
  c2.setSample("Space", 2);
68
- const [p1, p2] = hub.poll(time.now);
90
+ const [p1, p2] = hub.poll(clock.time);
69
91
  expect(p1.actions.basic.jump.value).is(1);
70
92
  expect(p2.actions.basic.jump.value).is(2);
71
93
  }),
72
94
  "device can shimmy": test(async () => {
73
- const { hub, time } = testSetupBravo();
95
+ const { hub, clock } = testSetupBravo();
74
96
  const c1 = testPlug(hub, new SamplerDevice());
75
97
  hub.shimmy(c1, 1);
76
98
  c1.setSample("Space", 1);
77
- const [p1, p2] = hub.poll(time.now);
99
+ const [p1, p2] = hub.poll(clock.time);
78
100
  expect(p1.actions.basic.jump.value).is(0);
79
101
  expect(p2.actions.basic.jump.value).is(1);
80
102
  }),
81
103
  "two devices can share a port": test(async () => {
82
- const { hub, time } = testSetupBravo();
104
+ const { hub, clock } = testSetupBravo();
83
105
  const c1 = testPlug(hub, new SamplerDevice());
84
106
  const c2 = testPlug(hub, new SamplerDevice());
85
107
  hub.shimmy(c2, -1);
86
108
  expect(hub.portByDevice(c1)).is(hub.portByDevice(c2));
87
109
  {
88
110
  c1.setSample("Space", 1);
89
- const [p1, p2] = hub.poll(time.now);
111
+ const [p1, p2] = hub.poll(clock.time);
90
112
  expect(p1.actions.basic.jump.value).is(1);
91
113
  expect(p2.actions.basic.jump.value).is(0);
92
114
  }
93
115
  {
94
116
  c2.setSample("Space", 1);
95
- const [p1, p2] = hub.poll(time.now);
117
+ const [p1, p2] = hub.poll(clock.time);
96
118
  expect(p1.actions.basic.jump.value).is(1);
97
119
  expect(p2.actions.basic.jump.value).is(0);
98
120
  }
99
121
  {
100
122
  c1.setSample("Space", 1);
101
123
  c2.setSample("Space", 2);
102
- const [p1, p2] = hub.poll(time.now);
124
+ const [p1, p2] = hub.poll(clock.time);
103
125
  expect(p1.actions.basic.jump.value).is(2);
104
126
  expect(p2.actions.basic.jump.value).is(0);
105
127
  }
106
128
  {
107
129
  c1.setSample("Space", 2);
108
130
  c2.setSample("Space", 1);
109
- const [p1, p2] = hub.poll(time.now);
131
+ const [p1, p2] = hub.poll(clock.time);
110
132
  expect(p1.actions.basic.jump.value).is(2);
111
133
  expect(p2.actions.basic.jump.value).is(0);
112
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core.test.js","sourceRoot":"","sources":["../../s/core/core.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.test.js","sourceRoot":"","sources":["../../s/core/core.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { Hub } from "../hub/hub.js";
2
2
  import { Device } from "../devices/device.js";
3
- import { Code } from "../bindings/types.js";
4
3
  import { Resolver } from "../bindings/resolver.js";
4
+ import { Code } from "../bindings/types.js";
5
5
  import { SamplerDevice } from "../devices/infra/sampler.js";
6
- export declare class TestTime {
7
- frame: number;
8
- get now(): number;
6
+ export declare class TestClock {
7
+ time: number;
8
+ set frame(frame: number);
9
9
  }
10
10
  export declare function testBindings(): {
11
11
  basic: {
@@ -31,7 +31,14 @@ export declare function testSetupAlpha(): {
31
31
  grenade: Code;
32
32
  };
33
33
  }>;
34
- time: TestTime;
34
+ clock: TestClock;
35
+ actions: import("../bindings/types.js").Actions<{
36
+ basic: {
37
+ jump: string;
38
+ shoot: string;
39
+ grenade: Code;
40
+ };
41
+ }>;
35
42
  };
36
43
  export declare function testSetupBravo(): {
37
44
  hub: Hub<{
@@ -41,5 +48,5 @@ export declare function testSetupBravo(): {
41
48
  grenade: Code;
42
49
  };
43
50
  }, any>;
44
- time: TestTime;
51
+ clock: TestClock;
45
52
  };
@@ -1,13 +1,13 @@
1
1
  import { Hub } from "../hub/hub.js";
2
2
  import { Port } from "../hub/port.js";
3
- import { asBindings } from "../bindings/types.js";
4
3
  import { Resolver } from "../bindings/resolver.js";
5
4
  import { SampleMap } from "../bindings/sample-map.js";
5
+ import { asBindings } from "../bindings/types.js";
6
6
  import { SamplerDevice } from "../devices/infra/sampler.js";
7
- export class TestTime {
8
- frame = 0;
9
- get now() {
10
- return (this.frame++) * (1000 / 60);
7
+ export class TestClock {
8
+ time = 0;
9
+ set frame(frame) {
10
+ this.time = frame * (1000 / 60);
11
11
  }
12
12
  }
13
13
  export function testBindings() {
@@ -24,21 +24,22 @@ export function testPlug(hub, device) {
24
24
  return device;
25
25
  }
26
26
  export function testSetupAlpha() {
27
- const time = new TestTime();
27
+ const clock = new TestClock();
28
28
  const device = new SamplerDevice();
29
29
  const resolver = new Resolver(testBindings());
30
30
  const modes = new Set(Object.keys(resolver.bindings));
31
- const resolve = () => resolver.resolve(time.now, modes, new SampleMap(device.samples()));
32
- return { device, resolver, resolve, time };
31
+ const actions = resolver.actions;
32
+ const resolve = () => resolver.resolve(clock.time, modes, new SampleMap(device.samples()));
33
+ return { device, resolver, resolve, clock, actions };
33
34
  }
34
35
  export function testSetupBravo() {
35
- const time = new TestTime();
36
+ const clock = new TestClock();
36
37
  const port = () => {
37
38
  const port = new Port(testBindings());
38
39
  port.modes.adds("basic");
39
40
  return port;
40
41
  };
41
42
  const hub = new Hub([port(), port(), port(), port()]);
42
- return { hub, time };
43
+ return { hub, clock };
43
44
  }
44
45
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../s/core/testing/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAC,UAAU,EAAO,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAA;AAEzD,MAAM,OAAO,QAAQ;IACpB,KAAK,GAAG,CAAC,CAAA;IAET,IAAI,GAAG;QACN,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACpC,CAAC;CACD;AAED,MAAM,UAAU,YAAY;IAC3B,OAAO,UAAU,CAAC;QACjB,KAAK,EAAE;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;SACxD;KACD,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAmB,GAAa,EAAE,MAAS;IAClE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChB,OAAO,MAAM,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CACrC,IAAI,CAAC,GAAG,EACR,KAAY,EACZ,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAC/B,CAAA;IACD,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,GAAG,EAAE;QACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACrD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../s/core/testing/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAC,UAAU,EAAO,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAA;AAEzD,MAAM,OAAO,SAAS;IACrB,IAAI,GAAG,CAAC,CAAA;IAER,IAAI,KAAK,CAAC,KAAa;QACtB,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IAChC,CAAC;CACD;AAED,MAAM,UAAU,YAAY;IAC3B,OAAO,UAAU,CAAC;QACjB,KAAK,EAAE;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;SACxD;KACD,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAmB,GAAa,EAAE,MAAS;IAClE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChB,OAAO,MAAM,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;IAChC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CACrC,KAAK,CAAC,IAAI,EACV,KAAY,EACZ,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAC/B,CAAA;IACD,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,GAAG,EAAE;QACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACrD,OAAO,EAAC,GAAG,EAAE,KAAK,EAAC,CAAA;AACpB,CAAC"}