@omnitronix/lucky-sharky-game-engine 1.1.0 → 1.2.0

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.
Files changed (77) hide show
  1. package/README.md +10 -0
  2. package/dist/__tests__/base-game.test.d.ts +2 -0
  3. package/dist/__tests__/base-game.test.d.ts.map +1 -0
  4. package/dist/__tests__/base-game.test.js +262 -0
  5. package/dist/__tests__/base-game.test.js.map +1 -0
  6. package/dist/__tests__/bonus-handlers.test.d.ts +2 -0
  7. package/dist/__tests__/bonus-handlers.test.d.ts.map +1 -0
  8. package/dist/__tests__/bonus-handlers.test.js +243 -0
  9. package/dist/__tests__/bonus-handlers.test.js.map +1 -0
  10. package/dist/__tests__/error-paths.test.d.ts +2 -0
  11. package/dist/__tests__/error-paths.test.d.ts.map +1 -0
  12. package/dist/__tests__/error-paths.test.js +328 -0
  13. package/dist/__tests__/error-paths.test.js.map +1 -0
  14. package/dist/__tests__/free-spins-handler.test.d.ts +2 -0
  15. package/dist/__tests__/free-spins-handler.test.d.ts.map +1 -0
  16. package/dist/__tests__/free-spins-handler.test.js +410 -0
  17. package/dist/__tests__/free-spins-handler.test.js.map +1 -0
  18. package/dist/__tests__/helpers/test-engine-factory.d.ts +98 -0
  19. package/dist/__tests__/helpers/test-engine-factory.d.ts.map +1 -0
  20. package/dist/__tests__/helpers/test-engine-factory.js +236 -0
  21. package/dist/__tests__/helpers/test-engine-factory.js.map +1 -0
  22. package/dist/__tests__/hold-win-handler.test.d.ts +2 -0
  23. package/dist/__tests__/hold-win-handler.test.d.ts.map +1 -0
  24. package/dist/__tests__/hold-win-handler.test.js +481 -0
  25. package/dist/__tests__/hold-win-handler.test.js.map +1 -0
  26. package/dist/__tests__/rng-gli19-compliance.test.d.ts +0 -4
  27. package/dist/__tests__/rng-gli19-compliance.test.d.ts.map +1 -1
  28. package/dist/__tests__/rng-gli19-compliance.test.js +232 -198
  29. package/dist/__tests__/rng-gli19-compliance.test.js.map +1 -1
  30. package/dist/__tests__/rng-security.test.d.ts +2 -0
  31. package/dist/__tests__/rng-security.test.d.ts.map +1 -0
  32. package/dist/__tests__/rng-security.test.js +379 -0
  33. package/dist/__tests__/rng-security.test.js.map +1 -0
  34. package/dist/__tests__/rtp-diagnostic.test.d.ts +6 -0
  35. package/dist/__tests__/rtp-diagnostic.test.d.ts.map +1 -0
  36. package/dist/__tests__/rtp-diagnostic.test.js +216 -0
  37. package/dist/__tests__/rtp-diagnostic.test.js.map +1 -0
  38. package/dist/__tests__/rtp-simulation.test.d.ts +0 -4
  39. package/dist/__tests__/rtp-simulation.test.d.ts.map +1 -1
  40. package/dist/__tests__/rtp-simulation.test.js +228 -153
  41. package/dist/__tests__/rtp-simulation.test.js.map +1 -1
  42. package/dist/__tests__/spin-generator.test.d.ts +2 -0
  43. package/dist/__tests__/spin-generator.test.d.ts.map +1 -0
  44. package/dist/__tests__/spin-generator.test.js +375 -0
  45. package/dist/__tests__/spin-generator.test.js.map +1 -0
  46. package/dist/__tests__/state-transitions.test.d.ts +2 -0
  47. package/dist/__tests__/state-transitions.test.d.ts.map +1 -0
  48. package/dist/__tests__/state-transitions.test.js +249 -0
  49. package/dist/__tests__/state-transitions.test.js.map +1 -0
  50. package/dist/__tests__/symbol-distribution.test.d.ts +2 -0
  51. package/dist/__tests__/symbol-distribution.test.d.ts.map +1 -0
  52. package/dist/__tests__/symbol-distribution.test.js +210 -0
  53. package/dist/__tests__/symbol-distribution.test.js.map +1 -0
  54. package/dist/__tests__/win-calculator.test.d.ts +2 -0
  55. package/dist/__tests__/win-calculator.test.d.ts.map +1 -0
  56. package/dist/__tests__/win-calculator.test.js +516 -0
  57. package/dist/__tests__/win-calculator.test.js.map +1 -0
  58. package/dist/config/game-logic-config/game-logic-config.d.ts.map +1 -1
  59. package/dist/config/game-logic-config/game-logic-config.js +27 -17
  60. package/dist/config/game-logic-config/game-logic-config.js.map +1 -1
  61. package/dist/logic/handlers/free-spins.handler.d.ts +2 -0
  62. package/dist/logic/handlers/free-spins.handler.d.ts.map +1 -1
  63. package/dist/logic/handlers/free-spins.handler.js +74 -6
  64. package/dist/logic/handlers/free-spins.handler.js.map +1 -1
  65. package/package.json +4 -2
  66. package/dist/__tests__/rng-seed-security.test.d.ts +0 -6
  67. package/dist/__tests__/rng-seed-security.test.d.ts.map +0 -1
  68. package/dist/__tests__/rng-seed-security.test.js +0 -263
  69. package/dist/__tests__/rng-seed-security.test.js.map +0 -1
  70. package/dist/__tests__/rng-seed-type.test.d.ts +0 -16
  71. package/dist/__tests__/rng-seed-type.test.d.ts.map +0 -1
  72. package/dist/__tests__/rng-seed-type.test.js +0 -288
  73. package/dist/__tests__/rng-seed-type.test.js.map +0 -1
  74. package/dist/__tests__/rng-stress-boundary.test.d.ts +0 -5
  75. package/dist/__tests__/rng-stress-boundary.test.d.ts.map +0 -1
  76. package/dist/__tests__/rng-stress-boundary.test.js +0 -395
  77. package/dist/__tests__/rng-stress-boundary.test.js.map +0 -1
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Hold-Win Handler Tests - Lucky Sharky
5
+ *
6
+ * Tests the Hold-Win bonus mechanics:
7
+ * - Respin mechanics
8
+ * - Gold coin placement and retention
9
+ * - 4 jackpot levels (Mini, Midi, Maxi, Mega)
10
+ * - Full screen bonus (all positions filled)
11
+ * - Respin count logic (3 respins, reset on new coin)
12
+ * - Hold-win completion and payout
13
+ */
14
+ const test_engine_factory_1 = require("./helpers/test-engine-factory");
15
+ describe('Hold-Win Handler - Lucky Sharky', () => {
16
+ beforeEach(() => {
17
+ (0, test_engine_factory_1.resetCommandIdCounter)();
18
+ });
19
+ describe('Respin Mechanics', () => {
20
+ it('should start with 3 initial respins', async () => {
21
+ const engine = (0, test_engine_factory_1.createEngine)();
22
+ const session = await (0, test_engine_factory_1.initSession)(engine);
23
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
24
+ expect(debugResult.success).toBe(true);
25
+ const bonus = debugResult.privateState.pendingBonuses[0];
26
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
27
+ expect(bonusResult.success).toBe(true);
28
+ });
29
+ it('should complete when respins reach 0', async () => {
30
+ const engine = (0, test_engine_factory_1.createEngine)();
31
+ const session = await (0, test_engine_factory_1.initSession)(engine);
32
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
33
+ expect(debugResult.success).toBe(true);
34
+ const bonus = debugResult.privateState.pendingBonuses[0];
35
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
36
+ expect(bonusResult.success).toBe(true);
37
+ expect(bonusResult.privateState.nextSpinType).toBe('BASE_GAME_SPIN');
38
+ });
39
+ it('should reset respins to 3 when new coin appears', async () => {
40
+ const { engine, lcgRng } = (0, test_engine_factory_1.createEngineWithLcgRng)(55555);
41
+ const session = await (0, test_engine_factory_1.initSession)(engine);
42
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
43
+ expect(debugResult.success).toBe(true);
44
+ const bonus = debugResult.privateState.pendingBonuses[0];
45
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
46
+ expect(bonusResult.success).toBe(true);
47
+ });
48
+ it('should decrement respins when no new symbols appear', async () => {
49
+ const engine = (0, test_engine_factory_1.createEngine)();
50
+ const session = await (0, test_engine_factory_1.initSession)(engine);
51
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
52
+ expect(debugResult.success).toBe(true);
53
+ const bonus = debugResult.privateState.pendingBonuses[0];
54
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
55
+ expect(bonusResult.success).toBe(true);
56
+ // Hold-win state should be cleared after completion
57
+ expect(bonusResult.privateState.holdWinState).toBeUndefined();
58
+ });
59
+ });
60
+ describe('Gold Coin Placement and Retention', () => {
61
+ it('should place coins on empty positions', async () => {
62
+ const engine = (0, test_engine_factory_1.createEngine)();
63
+ const session = await (0, test_engine_factory_1.initSession)(engine);
64
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
65
+ expect(debugResult.success).toBe(true);
66
+ const bonus = debugResult.privateState.pendingBonuses[0];
67
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
68
+ expect(bonusResult.success).toBe(true);
69
+ // Check that outcomes contain valid screens
70
+ if (bonusResult.outcome) {
71
+ const outcomes = Array.isArray(bonusResult.outcome)
72
+ ? bonusResult.outcome
73
+ : [bonusResult.outcome];
74
+ for (const o of outcomes) {
75
+ if (o.screen) {
76
+ expect(o.screen.length).toBe(5);
77
+ for (const reel of o.screen) {
78
+ expect(reel.length).toBe(3);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ });
84
+ it('should retain existing coins on subsequent respins', async () => {
85
+ const { engine, lcgRng } = (0, test_engine_factory_1.createEngineWithLcgRng)(12345);
86
+ const session = await (0, test_engine_factory_1.initSession)(engine);
87
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
88
+ expect(debugResult.success).toBe(true);
89
+ const bonus = debugResult.privateState.pendingBonuses[0];
90
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
91
+ expect(bonusResult.success).toBe(true);
92
+ });
93
+ it('should track coin values in coinValues matrix', async () => {
94
+ const engine = (0, test_engine_factory_1.createEngine)();
95
+ const session = await (0, test_engine_factory_1.initSession)(engine);
96
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
97
+ expect(debugResult.success).toBe(true);
98
+ const bonus = debugResult.privateState.pendingBonuses[0];
99
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
100
+ expect(bonusResult.success).toBe(true);
101
+ if (bonusResult.outcome) {
102
+ const outcomes = Array.isArray(bonusResult.outcome)
103
+ ? bonusResult.outcome
104
+ : [bonusResult.outcome];
105
+ for (const o of outcomes) {
106
+ if (o.coinValues) {
107
+ expect(Array.isArray(o.coinValues)).toBe(true);
108
+ }
109
+ }
110
+ }
111
+ });
112
+ it('should track new symbols in newSymbols matrix', async () => {
113
+ const engine = (0, test_engine_factory_1.createEngine)();
114
+ const session = await (0, test_engine_factory_1.initSession)(engine);
115
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
116
+ expect(debugResult.success).toBe(true);
117
+ const bonus = debugResult.privateState.pendingBonuses[0];
118
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
119
+ expect(bonusResult.success).toBe(true);
120
+ if (bonusResult.outcome) {
121
+ const outcomes = Array.isArray(bonusResult.outcome)
122
+ ? bonusResult.outcome
123
+ : [bonusResult.outcome];
124
+ for (const o of outcomes) {
125
+ if (o.newSymbols) {
126
+ expect(Array.isArray(o.newSymbols)).toBe(true);
127
+ }
128
+ }
129
+ }
130
+ });
131
+ });
132
+ describe('Jackpot Levels', () => {
133
+ it('should track Mini jackpot counters', async () => {
134
+ const engine = (0, test_engine_factory_1.createEngine)();
135
+ const session = await (0, test_engine_factory_1.initSession)(engine);
136
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
137
+ expect(debugResult.success).toBe(true);
138
+ const bonus = debugResult.privateState.pendingBonuses[0];
139
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
140
+ expect(bonusResult.success).toBe(true);
141
+ if (bonusResult.outcome) {
142
+ const outcomes = Array.isArray(bonusResult.outcome)
143
+ ? bonusResult.outcome
144
+ : [bonusResult.outcome];
145
+ for (const o of outcomes) {
146
+ if (o.jackpotCounters) {
147
+ expect(typeof o.jackpotCounters.mini).toBe('number');
148
+ expect(o.jackpotCounters.mini).toBeGreaterThanOrEqual(0);
149
+ }
150
+ }
151
+ }
152
+ });
153
+ it('should track Midi jackpot counters', async () => {
154
+ const engine = (0, test_engine_factory_1.createEngine)();
155
+ const session = await (0, test_engine_factory_1.initSession)(engine);
156
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
157
+ expect(debugResult.success).toBe(true);
158
+ const bonus = debugResult.privateState.pendingBonuses[0];
159
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
160
+ expect(bonusResult.success).toBe(true);
161
+ if (bonusResult.outcome) {
162
+ const outcomes = Array.isArray(bonusResult.outcome)
163
+ ? bonusResult.outcome
164
+ : [bonusResult.outcome];
165
+ for (const o of outcomes) {
166
+ if (o.jackpotCounters) {
167
+ expect(typeof o.jackpotCounters.midi).toBe('number');
168
+ expect(o.jackpotCounters.midi).toBeGreaterThanOrEqual(0);
169
+ }
170
+ }
171
+ }
172
+ });
173
+ it('should track Maxi jackpot counters', async () => {
174
+ const engine = (0, test_engine_factory_1.createEngine)();
175
+ const session = await (0, test_engine_factory_1.initSession)(engine);
176
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
177
+ expect(debugResult.success).toBe(true);
178
+ const bonus = debugResult.privateState.pendingBonuses[0];
179
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
180
+ expect(bonusResult.success).toBe(true);
181
+ if (bonusResult.outcome) {
182
+ const outcomes = Array.isArray(bonusResult.outcome)
183
+ ? bonusResult.outcome
184
+ : [bonusResult.outcome];
185
+ for (const o of outcomes) {
186
+ if (o.jackpotCounters) {
187
+ expect(typeof o.jackpotCounters.maxi).toBe('number');
188
+ expect(o.jackpotCounters.maxi).toBeGreaterThanOrEqual(0);
189
+ }
190
+ }
191
+ }
192
+ });
193
+ it('should track Mega jackpot counters', async () => {
194
+ const engine = (0, test_engine_factory_1.createEngine)();
195
+ const session = await (0, test_engine_factory_1.initSession)(engine);
196
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
197
+ expect(debugResult.success).toBe(true);
198
+ const bonus = debugResult.privateState.pendingBonuses[0];
199
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
200
+ expect(bonusResult.success).toBe(true);
201
+ if (bonusResult.outcome) {
202
+ const outcomes = Array.isArray(bonusResult.outcome)
203
+ ? bonusResult.outcome
204
+ : [bonusResult.outcome];
205
+ for (const o of outcomes) {
206
+ if (o.jackpotCounters) {
207
+ expect(typeof o.jackpotCounters.mega).toBe('number');
208
+ expect(o.jackpotCounters.mega).toBeGreaterThanOrEqual(0);
209
+ }
210
+ }
211
+ }
212
+ });
213
+ it('should calculate jackpot winnings when threshold is met', async () => {
214
+ const engine = (0, test_engine_factory_1.createEngine)();
215
+ const session = await (0, test_engine_factory_1.initSession)(engine);
216
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
217
+ expect(debugResult.success).toBe(true);
218
+ const bonus = debugResult.privateState.pendingBonuses[0];
219
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
220
+ expect(bonusResult.success).toBe(true);
221
+ // Final result should include jackpot winnings structure
222
+ if (bonusResult.outcome) {
223
+ const outcomes = Array.isArray(bonusResult.outcome)
224
+ ? bonusResult.outcome
225
+ : [bonusResult.outcome];
226
+ const lastOutcome = outcomes[outcomes.length - 1];
227
+ if (lastOutcome.finalWinning) {
228
+ expect(lastOutcome.finalWinning.jackpotWinnings).toBeDefined();
229
+ }
230
+ }
231
+ });
232
+ it('should apply correct multiplier for Mini jackpot (30x)', async () => {
233
+ const engine = (0, test_engine_factory_1.createEngine)();
234
+ const session = await (0, test_engine_factory_1.initSession)(engine);
235
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
236
+ expect(debugResult.success).toBe(true);
237
+ const bonus = debugResult.privateState.pendingBonuses[0];
238
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
239
+ expect(bonusResult.success).toBe(true);
240
+ });
241
+ it('should apply correct multiplier for Mega jackpot (1000x)', async () => {
242
+ const engine = (0, test_engine_factory_1.createEngine)();
243
+ const session = await (0, test_engine_factory_1.initSession)(engine);
244
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
245
+ expect(debugResult.success).toBe(true);
246
+ const bonus = debugResult.privateState.pendingBonuses[0];
247
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
248
+ expect(bonusResult.success).toBe(true);
249
+ });
250
+ });
251
+ describe('Full Screen Bonus', () => {
252
+ it('should detect full screen when all 15 positions filled', async () => {
253
+ const engine = (0, test_engine_factory_1.createEngine)();
254
+ const session = await (0, test_engine_factory_1.initSession)(engine);
255
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
256
+ expect(debugResult.success).toBe(true);
257
+ const bonus = debugResult.privateState.pendingBonuses[0];
258
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
259
+ expect(bonusResult.success).toBe(true);
260
+ });
261
+ it('should end respins immediately on full screen', async () => {
262
+ const engine = (0, test_engine_factory_1.createEngine)();
263
+ const session = await (0, test_engine_factory_1.initSession)(engine);
264
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
265
+ expect(debugResult.success).toBe(true);
266
+ const bonus = debugResult.privateState.pendingBonuses[0];
267
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
268
+ expect(bonusResult.success).toBe(true);
269
+ expect(bonusResult.privateState.nextSpinType).toBe('BASE_GAME_SPIN');
270
+ });
271
+ it('should award full screen bonus multiplier (100x)', async () => {
272
+ const engine = (0, test_engine_factory_1.createEngine)();
273
+ const session = await (0, test_engine_factory_1.initSession)(engine);
274
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
275
+ expect(debugResult.success).toBe(true);
276
+ const bonus = debugResult.privateState.pendingBonuses[0];
277
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
278
+ expect(bonusResult.success).toBe(true);
279
+ // Full screen bonus should be included in final winning if triggered
280
+ if (bonusResult.outcome) {
281
+ const outcomes = Array.isArray(bonusResult.outcome)
282
+ ? bonusResult.outcome
283
+ : [bonusResult.outcome];
284
+ const lastOutcome = outcomes[outcomes.length - 1];
285
+ if (lastOutcome.finalWinning) {
286
+ expect(typeof lastOutcome.finalWinning.fullScreenBonus).toBe('number');
287
+ expect(lastOutcome.finalWinning.fullScreenBonus).toBeGreaterThanOrEqual(0);
288
+ }
289
+ }
290
+ });
291
+ });
292
+ describe('Hold-Win Completion and Payout', () => {
293
+ it('should return to BASE_GAME_SPIN after completion', async () => {
294
+ const engine = (0, test_engine_factory_1.createEngine)();
295
+ const session = await (0, test_engine_factory_1.initSession)(engine);
296
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
297
+ expect(debugResult.success).toBe(true);
298
+ const bonus = debugResult.privateState.pendingBonuses[0];
299
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
300
+ expect(bonusResult.success).toBe(true);
301
+ expect(bonusResult.privateState.nextSpinType).toBe('BASE_GAME_SPIN');
302
+ });
303
+ it('should clear holdWinState after completion', async () => {
304
+ const engine = (0, test_engine_factory_1.createEngine)();
305
+ const session = await (0, test_engine_factory_1.initSession)(engine);
306
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
307
+ expect(debugResult.success).toBe(true);
308
+ const bonus = debugResult.privateState.pendingBonuses[0];
309
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
310
+ expect(bonusResult.success).toBe(true);
311
+ expect(bonusResult.privateState.holdWinState).toBeUndefined();
312
+ });
313
+ it('should calculate total winning from coin values', async () => {
314
+ const engine = (0, test_engine_factory_1.createEngine)();
315
+ const session = await (0, test_engine_factory_1.initSession)(engine);
316
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
317
+ expect(debugResult.success).toBe(true);
318
+ const bonus = debugResult.privateState.pendingBonuses[0];
319
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
320
+ expect(bonusResult.success).toBe(true);
321
+ if (bonusResult.outcome) {
322
+ const outcomes = Array.isArray(bonusResult.outcome)
323
+ ? bonusResult.outcome
324
+ : [bonusResult.outcome];
325
+ const lastOutcome = outcomes[outcomes.length - 1];
326
+ if (lastOutcome.finalWinning) {
327
+ expect(typeof lastOutcome.finalWinning.coinWinning).toBe('number');
328
+ expect(lastOutcome.finalWinning.coinWinning).toBeGreaterThanOrEqual(0);
329
+ }
330
+ }
331
+ });
332
+ it('should produce non-negative total winning', async () => {
333
+ const engine = (0, test_engine_factory_1.createEngine)();
334
+ const session = await (0, test_engine_factory_1.initSession)(engine);
335
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
336
+ expect(debugResult.success).toBe(true);
337
+ const bonus = debugResult.privateState.pendingBonuses[0];
338
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
339
+ expect(bonusResult.success).toBe(true);
340
+ if (bonusResult.outcome) {
341
+ const outcomes = Array.isArray(bonusResult.outcome)
342
+ ? bonusResult.outcome
343
+ : [bonusResult.outcome];
344
+ for (const o of outcomes) {
345
+ if (o.playerWinning !== undefined) {
346
+ expect(o.playerWinning).toBeGreaterThanOrEqual(0);
347
+ }
348
+ }
349
+ }
350
+ });
351
+ it('should produce finite total winning', async () => {
352
+ const engine = (0, test_engine_factory_1.createEngine)();
353
+ const session = await (0, test_engine_factory_1.initSession)(engine);
354
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
355
+ expect(debugResult.success).toBe(true);
356
+ const bonus = debugResult.privateState.pendingBonuses[0];
357
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
358
+ expect(bonusResult.success).toBe(true);
359
+ if (bonusResult.outcome) {
360
+ const outcomes = Array.isArray(bonusResult.outcome)
361
+ ? bonusResult.outcome
362
+ : [bonusResult.outcome];
363
+ for (const o of outcomes) {
364
+ if (o.playerWinning !== undefined) {
365
+ expect(Number.isFinite(o.playerWinning)).toBe(true);
366
+ }
367
+ }
368
+ }
369
+ });
370
+ it('should allow normal spins after hold-win completes', async () => {
371
+ const engine = (0, test_engine_factory_1.createEngine)();
372
+ const session = await (0, test_engine_factory_1.initSession)(engine);
373
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
374
+ expect(debugResult.success).toBe(true);
375
+ const bonus = debugResult.privateState.pendingBonuses[0];
376
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
377
+ expect(bonusResult.success).toBe(true);
378
+ const spinResult = await (0, test_engine_factory_1.executeSpin)(engine, bonusResult.publicState, bonusResult.privateState);
379
+ expect(spinResult.success).toBe(true);
380
+ });
381
+ });
382
+ describe('Bet Amount Handling', () => {
383
+ it('should scale coin winnings with bet amount', async () => {
384
+ const engine = (0, test_engine_factory_1.createEngine)();
385
+ const session = await (0, test_engine_factory_1.initSession)(engine, 2.0);
386
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS', 2.0);
387
+ expect(debugResult.success).toBe(true);
388
+ const bonus = debugResult.privateState.pendingBonuses[0];
389
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType, 2.0);
390
+ expect(bonusResult.success).toBe(true);
391
+ });
392
+ it('should scale jackpot winnings with bet amount', async () => {
393
+ const engine = (0, test_engine_factory_1.createEngine)();
394
+ const session = await (0, test_engine_factory_1.initSession)(engine, 5.0);
395
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS', 5.0);
396
+ expect(debugResult.success).toBe(true);
397
+ const bonus = debugResult.privateState.pendingBonuses[0];
398
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType, 5.0);
399
+ expect(bonusResult.success).toBe(true);
400
+ });
401
+ });
402
+ describe('RNG Outcome Tracking', () => {
403
+ it('should include RNG outcome for hold-win', async () => {
404
+ const engine = (0, test_engine_factory_1.createEngine)();
405
+ const session = await (0, test_engine_factory_1.initSession)(engine);
406
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
407
+ expect(debugResult.success).toBe(true);
408
+ const bonus = debugResult.privateState.pendingBonuses[0];
409
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
410
+ expect(bonusResult.success).toBe(true);
411
+ expect(bonusResult.rngOutcome).toBeDefined();
412
+ });
413
+ it('should produce valid RNG outcome structure', async () => {
414
+ const engine = (0, test_engine_factory_1.createEngine)();
415
+ const session = await (0, test_engine_factory_1.initSession)(engine);
416
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
417
+ expect(debugResult.success).toBe(true);
418
+ const bonus = debugResult.privateState.pendingBonuses[0];
419
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
420
+ expect(bonusResult.success).toBe(true);
421
+ if (bonusResult.rngOutcome) {
422
+ const validation = (0, test_engine_factory_1.validateRngOutcome)(bonusResult.rngOutcome);
423
+ expect(validation.valid).toBe(true);
424
+ }
425
+ });
426
+ });
427
+ describe('Deterministic Testing with Mock RNG', () => {
428
+ it('should produce deterministic results with same mock values', async () => {
429
+ const mockValues = Array(200).fill(50);
430
+ const { engine: engine1 } = (0, test_engine_factory_1.createEngineWithMockRng)(mockValues);
431
+ const { engine: engine2 } = (0, test_engine_factory_1.createEngineWithMockRng)(mockValues);
432
+ const session1 = await (0, test_engine_factory_1.initSession)(engine1);
433
+ const session2 = await (0, test_engine_factory_1.initSession)(engine2);
434
+ const debug1 = await (0, test_engine_factory_1.debugTriggerBonus)(engine1, session1.publicState, session1.privateState, 'HOLD_WIN_BONUS');
435
+ const debug2 = await (0, test_engine_factory_1.debugTriggerBonus)(engine2, session2.publicState, session2.privateState, 'HOLD_WIN_BONUS');
436
+ expect(debug1.success).toBe(true);
437
+ expect(debug2.success).toBe(true);
438
+ });
439
+ it('should handle LCG RNG for reproducible simulations', async () => {
440
+ const { engine, lcgRng } = (0, test_engine_factory_1.createEngineWithLcgRng)(99999);
441
+ const session = await (0, test_engine_factory_1.initSession)(engine);
442
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
443
+ expect(debugResult.success).toBe(true);
444
+ const bonus = debugResult.privateState.pendingBonuses[0];
445
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
446
+ expect(bonusResult.success).toBe(true);
447
+ });
448
+ });
449
+ describe('State Management', () => {
450
+ it('should preserve booster level through hold-win', async () => {
451
+ const engine = (0, test_engine_factory_1.createEngine)();
452
+ const session = await (0, test_engine_factory_1.initSession)(engine);
453
+ const modifiedPrivate = {
454
+ ...session.privateState,
455
+ boosterLevel: 5,
456
+ };
457
+ const modifiedPublic = {
458
+ ...session.publicState,
459
+ boosterLevel: 5,
460
+ };
461
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, modifiedPublic, modifiedPrivate, 'HOLD_WIN_BONUS');
462
+ expect(debugResult.success).toBe(true);
463
+ const bonus = debugResult.privateState.pendingBonuses[0];
464
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
465
+ expect(bonusResult.success).toBe(true);
466
+ expect(bonusResult.publicState.boosterLevel).toBeGreaterThanOrEqual(0);
467
+ expect(bonusResult.publicState.boosterLevel).toBeLessThanOrEqual(9);
468
+ });
469
+ it('should maintain consistent public and private state', async () => {
470
+ const engine = (0, test_engine_factory_1.createEngine)();
471
+ const session = await (0, test_engine_factory_1.initSession)(engine);
472
+ const debugResult = await (0, test_engine_factory_1.debugTriggerBonus)(engine, session.publicState, session.privateState, 'HOLD_WIN_BONUS');
473
+ expect(debugResult.success).toBe(true);
474
+ const bonus = debugResult.privateState.pendingBonuses[0];
475
+ const bonusResult = await (0, test_engine_factory_1.startBonusRound)(engine, debugResult.publicState, debugResult.privateState, bonus.bonusType);
476
+ expect(bonusResult.success).toBe(true);
477
+ expect(bonusResult.publicState.boosterLevel).toBe(bonusResult.privateState.boosterLevel);
478
+ });
479
+ });
480
+ });
481
+ //# sourceMappingURL=hold-win-handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hold-win-handler.test.js","sourceRoot":"","sources":["../../src/__tests__/hold-win-handler.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,2 @@
1
- /**
2
- * GLI-19 Compliance Tests - Lucky Sharky
3
- * Audit Trail & Tamper Detection Verification
4
- */
5
1
  export {};
6
2
  //# sourceMappingURL=rng-gli19-compliance.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rng-gli19-compliance.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rng-gli19-compliance.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
1
+ {"version":3,"file":"rng-gli19-compliance.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rng-gli19-compliance.test.ts"],"names":[],"mappings":""}