All files / src/lib base.25.lib.ts

100% Statements 52/52
100% Branches 18/18
100% Functions 3/3
100% Lines 52/52

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 48 49 50 51 521x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 15x 15x 15x 1x 1x 2x 2x 1x 1x 33x 33x 27x 33x 1x 1x 5x 5x 5x 31x 9x 9x 9x 5x 5x 5x 5x 5x 31x 9x 9x 9x 5x 5x 5x
const mappingArray = [
    [")", 10],
    ["!", 11],
    ["@", 12],
    ["#", 13],
    ["$", 14],
    ["%", 15],
    ["^", 16],
    ["&", 17],
    ["*", 18],
    ["(", 19],
    ["[", 20],
    ["]", 21],
    ["\\", 22],
    ["{", 23],
    ["}", 24]
];
 
function getDniFontNumber(base10Number: number): string | number {
    return mappingArray.find(([, number]) => number === base10Number)?.[0] || base10Number.toString();
}
 
export function getDniNumberFromFont(fontSymbol: string) {
    return mappingArray.find(([font]) => font === fontSymbol)?.[1] || fontSymbol;
}
 
export const toBase25 = (base10Number: number) => {
    let numberToEvaluate = base10Number;
    if(base10Number < 10) {
        return `${base10Number}`;
    } else if (base10Number >= 10 && base10Number <= 24) {
        return `${getDniFontNumber(base10Number)}`;
    }
 
    // Large Number
    const stack: any = [];
    while(numberToEvaluate >= 25){
        stack.push(numberToEvaluate % 25);
        numberToEvaluate = Math.floor(numberToEvaluate / 25);
    }
 
    let
        dniString = getDniFontNumber(numberToEvaluate),
        totalStackSize = stack.length;
 
    for(let i = 0; i < totalStackSize; i++){
        let num = stack.pop();
        dniString += getDniFontNumber(num).toString();
    }
 
    return dniString;
};