UNPKG

card-games-utils

Version:
616 lines (615 loc) 48.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ErrorEnum_1 = require("../constants/ErrorEnum"); var StandardDeckEnum_1 = require("../constants/StandardDeckEnum"); var StandardCardHelper_1 = require("../helpers/StandardCardHelper"); var Rummy_1 = require("../models/Rummy"); describe('test the Rummy model and all methods in it', function () { it('test makeMeld() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 9)); var meld = rummyGame.makeMeld([ // SET StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), // SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_SEVEN), // PURE SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), ], [ [0, 1, 2], [3, 4, 5], [6, 7, 8], ]); expect(Array.isArray(meld.cards)).toBe(true); expect(meld.cards.length).toBe(9); expect(Array.isArray(meld.groups)).toBe(true); expect(meld.groups.length).toBe(3); expect(meld.groups.every(function (group) { return group.length === 3; })).toBe(true); }); it('test getCardGroup() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 9)); var meld = rummyGame.makeMeld([ // SET StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), // SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_SEVEN), // PURE SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), ], [ [0, 1, 2], [3, 4, 5], [6, 7, 8], ]); var cardGroup = rummyGame.getCardGroup(meld); expect(Array.isArray(cardGroup)).toBe(true); expect(cardGroup.length).toBe(3); expect(cardGroup.every(function (group) { return group.length === 3; })).toBe(true); }); it('test sortMeld() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 9)); var cardGroup = [ // SET StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), // SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_SEVEN), // PURE SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), ]; var meld = rummyGame.makeMeld(cardGroup, [ [0, 1, 2], [3, 4, 5], [6, 7, 8], ]); meld = rummyGame.sortMeld(meld); expect(meld.groups).toEqual([[0, 3], [1, 4], [2, 5], [6, 7, 8], []]); }); it('test calculatePoints() method', function () { var points = Rummy_1.Rummy.calculatePoints([ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]); expect(points).toEqual(3); points = Rummy_1.Rummy.calculatePoints([ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ], StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE); expect(points).toEqual(2); points = Rummy_1.Rummy.calculatePoints([ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ], StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE); expect(points).toEqual(1); points = Rummy_1.Rummy.calculatePoints([ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_JACK), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_KING), ], StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE); expect(points).toEqual(20); }); it('test isReadyToDeclare() method', function () { var onlySetRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, false, false, true, true, 9)); var onlySequenceRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(false, true, false, true, true, 9)); var onlyPureSequenceRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(false, false, true, true, true, 9)); var allRuleRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 9)); var noJokerRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, false, true, 9)); var noWildRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, false, 9)); // without any joker or wildcard var meld = noWildRummyGame.makeMeld([ // SET StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), // SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_SEVEN), // PURE SEQUENCE / SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), ], [ [0, 1, 2], [3, 4, 5], [6, 7, 8], ]); // CORRECT ONES expect(onlySetRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).isValid).toEqual(true); expect(onlySetRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).points).toEqual(18); expect(onlySequenceRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).isValid).toEqual(true); expect(onlySequenceRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).points).toEqual(10); expect(onlyPureSequenceRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).isValid).toEqual(true); expect(onlyPureSequenceRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).points).toEqual(10); // INCORRECT ONES expect(noWildRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).isValid).toEqual(false); expect(noWildRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.CLUBS_FIVE).error).toEqual(ErrorEnum_1.ErrorEnum.WILD_NOT_ALLOWED); expect(noJokerRummyGame.isReadyToDeclare(meld).isValid).toEqual(false); expect(noJokerRummyGame.isReadyToDeclare(meld).error).toEqual(ErrorEnum_1.ErrorEnum.JOKER_NOT_ALLOWED); expect(allRuleRummyGame.isReadyToDeclare(meld).isValid).toEqual(true); expect(allRuleRummyGame.isReadyToDeclare(meld).points).toEqual(0); // special case with 3 pure sequence and 1 set(1 pure sequence is with wildcard, so it's actually a sequence) var specialRuleRummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 13)); meld = specialRuleRummyGame.makeMeld([ // PURE SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_QUEEN), // PURE SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_QUEEN), // PURE SEQUENCE / SEQUENCE StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_EIGHT), // SET StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_NINE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_NINE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_NINE), ], [ [0, 1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11, 12], ]); expect(specialRuleRummyGame.isReadyToDeclare(meld, StandardDeckEnum_1.StandardCardName.DIAMONDS_EIGHT).isValid).toEqual(true); }); it('test isInSequence() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 13)); // NOTE::without any flex cards, a sequence is pure sequence(so we focus more on deck with flex cards) // with the exception of Q,K,A - without proper order var correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); // -------------------------------------------------------------------------------------------------------------------------- // with 1 joker correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_THREE), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); var incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), ]; expect(rummyGame.isInSequence(incorrectSequence).isValid).toBe(false); incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), ]; expect(rummyGame.isInSequence(incorrectSequence).isValid).toBe(false); incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), ]; expect(rummyGame.isInSequence(incorrectSequence).isValid).toBe(false); // -------------------------------------------------------------------------------------------------------------------------- // with 2 joker incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), ]; expect(rummyGame.isInSequence(incorrectSequence).isValid).toBe(false); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInSequence(correctSequence).isValid).toBe(true); // -------------------------------------------------------------------------------------------------------------------------- // with 1 wildcard correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; expect(rummyGame.isInSequence(correctSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInSequence(correctSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInSequence(correctSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); correctSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_TEN), ]; expect(rummyGame.isInSequence(correctSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), ]; expect(rummyGame.isInSequence(incorrectSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), ]; expect(rummyGame.isInSequence(incorrectSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), ]; expect(rummyGame.isInSequence(incorrectSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); // -------------------------------------------------------------------------------------------------------------------------- // with 2 wildcard incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), ]; expect(rummyGame.isInSequence(incorrectSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); // -------------------------------------------------------------------------------------------------------------------------- // with 1 wildcard and 1 joker incorrectSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), ]; expect(rummyGame.isInSequence(incorrectSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); // Complex case: Valid sequence with 4 cards and 1 JOKER var validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), ]; expect(rummyGame.isInSequence(validComplexSequence).isValid).toBe(true); // Complex case: Valid sequence with 4 cards and 2 JOKERs validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), ]; expect(rummyGame.isInSequence(validComplexSequence).isValid).toBe(true); // Complex case: Valid sequence with 5 cards and 1 wildcard validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FOUR), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInSequence(validComplexSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_FOUR), ]; expect(rummyGame.isInSequence(validComplexSequence, StandardDeckEnum_1.StandardCardName.SPADES_SIX).isValid).toBe(true); // Complex case: Invalid sequence with 4 cards and 2 JOKERs var invalidComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_FOUR), ]; expect(rummyGame.isInSequence(invalidComplexSequence).isValid).toBe(true); // Complex case: Valid sequence with 6 cards and 1 wildcard and 1 JOKER validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_SIX), ]; expect(rummyGame.isInSequence(validComplexSequence, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); // Complex case: Invalid sequence with 6 cards and 1 JOKER and 1 wildcard invalidComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_FOUR), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_THREE), ]; expect(rummyGame.isInSequence(invalidComplexSequence).isValid).toBe(false); // when sequence is actually a pure sequence but with 1 wildcard validComplexSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SIX), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_SEVEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_EIGHT), ]; expect(rummyGame.isInSequence(validComplexSequence, StandardDeckEnum_1.StandardCardName.SPADES_EIGHT).isValid).toBe(true); }); it('test isInSet() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 13)); // without any joker or wildcard var correctSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(correctSet).isValid).toBe(true); var incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(incorrectSet).isValid).toBe(false); // with 1 joker correctSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(correctSet).isValid).toBe(true); incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), ]; expect(rummyGame.isInSet(incorrectSet).isValid).toBe(false); // with 2 joker incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); // with 1 wildcard correctSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(correctSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_FIVE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); // with 2 wildcard incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); // with 1 wildcard and 1 joker incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.HEARTS_ACE), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(true); // with 3 jokers incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).isValid).toBe(false); expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.DIAMONDS_TEN).error).toBe(ErrorEnum_1.ErrorEnum.AT_LEAST_ONE_NORMAL_CARD_NEEDED_FOR_SET); // with 3 wildcard incorrectSet = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.SPADES_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_KING), ]; expect(rummyGame.isInSet(incorrectSet, StandardDeckEnum_1.StandardCardName.HEARTS_KING).isValid).toBe(true); }); it('test isInPureSequence() method', function () { var rummyGame = new Rummy_1.Rummy(Rummy_1.Rummy.makeRummyConfig(true, true, true, true, true, 13)); // without any joker or wildcard var correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FOUR), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // without proper order correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; // with the exception of Q,K,A correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // with the exception of Q,K,A - without proper order correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // with the exception of K,A,2 correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // with the exception of K,A,2- without proper order correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // Valid pure sequence with face cards in different order correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // Valid pure sequence with four cards including face card correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_JACK), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); // Valid pure sequence with face cards correctPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_KING), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), ]; expect(rummyGame.isInPureSequence(correctPureSequence).isValid).toBe(true); var incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // Invalid pure sequence with only two cards incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_TWO), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // Invalid pure sequence with repeated cards incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FIVE), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // Invalid pure sequence with a gap between cards incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_FOUR), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // Invalid pure sequence with duplicate face cards incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_JACK), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_QUEEN), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_JACK), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_ACE), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // with 1 joker incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.DIAMONDS_TWO), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); // with 2 joker incorrectPureSequence = [ StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.JOKER), StandardCardHelper_1.StandardCardHelper.makeStandardCard(StandardDeckEnum_1.StandardCardName.CLUBS_THREE), ]; expect(rummyGame.isInPureSequence(incorrectPureSequence).isValid).toBe(false); }); });