All files / libs/games/src/dices diceBase.ts

100% Statements 47/47
100% Branches 6/6
100% Functions 4/4
100% Lines 47/47

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 41 42 43 44 45 46 47 481x 1x 1x 1x 1x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 8x 8x 14x 14x 14x 14x 14x 2x 2x 2x 2x 2x 6x 6x 2x 2x 1x 1x 1x 1x 2x 2x 2x 14x  
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 {
        let result: number;
        const rolls: number[] = [];
 
        // eslint-disable-next-line no-loops/no-loops
        for (let i = 0; i < rerolls; i++) {
            rolls.push(this.roll());
        }
 
        if (DiceAsymmetricMethod.MIN === method) {
            result = Math.min(...rolls);
        } else {
            result = Math.max(...rolls);
        }
 
        return result;
    }
}