Card and Pile tests
This commit is contained in:
parent
59a0995c29
commit
63ea3ff952
3 changed files with 98 additions and 2 deletions
46
card.test.ts
Normal file
46
card.test.ts
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import { describe, expect, test } from "bun:test"
|
||||
import Card, { Index, Suit } from "./card"
|
||||
|
||||
describe('types', () => {
|
||||
test('has expected indexes', () => {
|
||||
[
|
||||
Index.Joker,
|
||||
Index.One,
|
||||
Index.Two,
|
||||
Index.Three,
|
||||
Index.Four,
|
||||
Index.Five,
|
||||
Index.Six,
|
||||
Index.Seven,
|
||||
Index.Eight,
|
||||
Index.Nine,
|
||||
Index.Ten,
|
||||
Index.Jack,
|
||||
Index.Queen,
|
||||
Index.King,
|
||||
Index.Ace
|
||||
].forEach((current, i) => expect(current).toBe(i))
|
||||
})
|
||||
|
||||
test('has expected suits', () => {
|
||||
[Suit.Diamond, Suit.Club, Suit.Heart, Suit.Spade]
|
||||
.forEach((current, i) => expect(current).toBe(i))
|
||||
})
|
||||
})
|
||||
|
||||
describe('Card', () => {
|
||||
test('can read simple data from a Card', () => {
|
||||
const card = new Card(Index.Five, Suit.Diamond)
|
||||
|
||||
expect(card.prettyIndex).toBe('Five')
|
||||
expect(card.prettySuit).toBe('♦')
|
||||
expect(card.pretty).toBe('Five of ♦')
|
||||
})
|
||||
|
||||
test('can read decimal data from a Card', () => {
|
||||
const card = new Card(Index.Five, Suit.Club)
|
||||
|
||||
expect(card.decimalIndex).toBe('101')
|
||||
expect(card.decimalSuit).toBe('01')
|
||||
})
|
||||
})
|
||||
14
card.ts
14
card.ts
|
|
@ -31,14 +31,24 @@ export default class Card {
|
|||
this.suit = suit
|
||||
}
|
||||
|
||||
// 000, 001, 010...
|
||||
get decimalIndex() {
|
||||
const base = 2
|
||||
return this.index.toString(base)
|
||||
const digits = 3
|
||||
return this
|
||||
.index
|
||||
.toString(base)
|
||||
.padStart(digits, '0')
|
||||
}
|
||||
|
||||
// 00, 01, 10, 11
|
||||
get decimalSuit() {
|
||||
const base = 2
|
||||
return this.suit.toString(base)
|
||||
const digits = 2
|
||||
return this
|
||||
.suit
|
||||
.toString(base)
|
||||
.padStart(digits, '0')
|
||||
}
|
||||
|
||||
get pretty() {
|
||||
|
|
|
|||
40
pile.test.ts
Normal file
40
pile.test.ts
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import { expect, test, spyOn } from "bun:test"
|
||||
import Pile from "./pile"
|
||||
import Card, { Index, Suit } from "./card"
|
||||
|
||||
test('can assign Cards to a Pile', () => {
|
||||
const fiveOfClubs = new Card(Index.Five, Suit.Club)
|
||||
const aceOfSpades = new Card(Index.Ace, Suit.Spade)
|
||||
const pile = new Pile([fiveOfClubs, aceOfSpades])
|
||||
|
||||
expect(pile.cards[0]).toBe(fiveOfClubs)
|
||||
expect(pile.cards[1]).toBe(aceOfSpades)
|
||||
})
|
||||
|
||||
test('can pretty print all Cards in a Pile', () => {
|
||||
const fiveOfClubs = new Card(Index.Five, Suit.Club)
|
||||
const aceOfSpades = new Card(Index.Ace, Suit.Spade)
|
||||
const pile = new Pile([fiveOfClubs, aceOfSpades])
|
||||
|
||||
expect(pile.pretty).toBe(`Five of ♣\nAce of ♠`)
|
||||
})
|
||||
|
||||
test('can shuffle a Pile', () => {
|
||||
spyOn(global.Math, 'random').mockReturnValue(0.123);
|
||||
|
||||
const fiveOfClubs = new Card(Index.Five, Suit.Club)
|
||||
const aceOfSpades = new Card(Index.Ace, Suit.Spade)
|
||||
const queenOfHearts = new Card(Index.Queen, Suit.Heart)
|
||||
const pile = new Pile([fiveOfClubs, aceOfSpades, queenOfHearts])
|
||||
|
||||
pile.shuffle()
|
||||
|
||||
expect(pile.cards.includes(fiveOfClubs)).toBe(true)
|
||||
expect(pile.cards.includes(aceOfSpades)).toBe(true)
|
||||
expect(pile.cards.includes(queenOfHearts)).toBe(true)
|
||||
expect(pile.cards[0]).not.toBe(fiveOfClubs)
|
||||
expect(pile.cards[1]).not.toBe(aceOfSpades)
|
||||
expect(pile.cards[2]).not.toBe(queenOfHearts)
|
||||
|
||||
spyOn(global.Math, 'random').mockRestore();
|
||||
}, { repeats: 9 })
|
||||
Loading…
Add table
Reference in a new issue