All files / projects-dev/libs/games/src/dices diceBase.ts

100% Statements 40/40
100% Branches 7/7
100% Functions 4/4
100% Lines 40/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 411x 1x 1x 1x 1x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 14x 14x 15x 15x 15x 15x 15x 2x 2x 2x 2x 6x 6x 2x 2x 2x 15x  
import { random } from "@jga/algorithms";
 
import { DiceAsymmetricMethod, DiceInterface } from "./diceInterface";
 
export abstract class DiceBase implements DiceInterface {
    /**
     * @inheritdoc
     */
    public readonly sides: number;
 
    /**
     * Constructor
     *
     * @param sides number Dice sides number
     */
    public constructor(sides: number) {
        this.sides = sides;
    }
 
    /**
     * @inheritdoc
     */
    public roll(): number {
        return random(1, this.sides);
    }
 
    /**
     * @inheritdoc
     */
    public asymmetricRoll(method: DiceAsymmetricMethod, rerolls: number): number {
        const rolls: number[] = [];
 
        // eslint-disable-next-line no-loops/no-loops
        for (let index = 0; index < rerolls; index++) {
            rolls.push(this.roll());
        }
 
        return DiceAsymmetricMethod.MIN === method ? Math.min(...rolls) : Math.max(...rolls);
    }
}