Basic draft library #19

Merged
hamcha merged 13 commits from feature/draft-lib into master 2019-09-16 13:53:07 +00:00
3 changed files with 31 additions and 3 deletions
Showing only changes of commit 4e2afd4db3 - Show all commits

View file

@ -192,7 +192,7 @@ export class PackBuilder {
} }
// Yields random cards from a chosen pool // Yields random cards from a chosen pool
function* randomProvider(pool: Card[]) { export function* randomProvider(pool: Card[]) {
while (true) { while (true) {
const idx = Math.floor(Math.random() * pool.length); const idx = Math.floor(Math.random() * pool.length);
yield pool[idx]; yield pool[idx];
@ -201,12 +201,12 @@ function* randomProvider(pool: Card[]) {
// Divides a list of card to a map of rarities // Divides a list of card to a map of rarities
// ie. [ff14, ff16, ff17] => { "C" : ["ff14"], "U": ["ff17"], "R": ["ff16"] } // ie. [ff14, ff16, ff17] => { "C" : ["ff14"], "U": ["ff17"], "R": ["ff16"] }
function spanByRarity(pool: Card[]): Record<string, Card[]> { export function spanByRarity(pool: Card[]): Record<string, Card[]> {
return pool.reduce((map, current) => { return pool.reduce((map, current) => {
if (!(current.Rarity in map)) { if (!(current.Rarity in map)) {
map[current.Rarity] = []; map[current.Rarity] = [];
} }
map[current.Rarity] = current; map[current.Rarity].push(current);
return map; return map;
}, Object.create(null)); }, Object.create(null));
} }

View file

@ -0,0 +1,3 @@
export * from "./cube";
export * from "./booster";
export * from "./types";

View file

@ -0,0 +1,25 @@
import { setupIDBShim } from "@/testing/IDBShim";
import { initDB, loadSets, Database } from "@/mlpccg";
import { PackBuilder, spanByRarity } from "@/mlpccg/draft";
setupIDBShim();
describe("mlpccg/draft", () => {
beforeAll(async () => {
jest.setTimeout(15000);
initDB();
await loadSets();
});
test("Set booster packs are generated correctly", async () => {
expect(Database).toBeTruthy();
const builder = await PackBuilder.fromSet("FF");
const pack = builder.buildPack();
// Check pack size
expect(pack).toHaveLength(12);
const rarities = spanByRarity(pack);
// Check pack distribution
expect(rarities["R"]).toHaveLength(1);
expect(rarities["U"]).toHaveLength(3);
});
});