alvarocastro/numeral-prefix

View on GitHub
test.js

Summary

Maintainability
A
0 mins
Test Coverage
const test = require('ava');
const numeralPrefix = require('.');

test('Should work', t => {
    const cases = {
        1: 'henagon',
        2: 'digon',
        3: 'trigon',
        4: 'tetragon',
        5: 'pentagon',
        6: 'hexagon',
        7: 'heptagon',
        8: 'octagon',
        9: 'enneagon',
        10: 'decagon',
        11: 'hendecagon',
        12: 'dodecagon',
        13: 'tridecagon',
        14: 'tetradecagon',
        15: 'pentadecagon',
        16: 'hexadecagon',
        17: 'heptadecagon',
        18: 'octadecagon',
        19: 'enneadecagon',
        20: 'icosagon',
        21: 'icosikaihenagon',
        22: 'icosikaidigon',
        23: 'icosikaitrigon',
        24: 'icosikaitetragon',
        25: 'icosikaipentagon',
        26: 'icosikaihexagon',
        27: 'icosikaiheptagon',
        28: 'icosikaioctagon',
        29: 'icosikaienneagon',
        30: 'triacontagon',
        31: 'triacontakaihenagon',
        32: 'triacontakaidigon',
        33: 'triacontakaitrigon',
        34: 'triacontakaitetragon',
        35: 'triacontakaipentagon',
        36: 'triacontakaihexagon',
        37: 'triacontakaiheptagon',
        38: 'triacontakaioctagon',
        39: 'triacontakaienneagon',
        40: 'tetracontagon',
        41: 'tetracontakaihenagon',
        42: 'tetracontakaidigon',
        43: 'tetracontakaitrigon',
        44: 'tetracontakaitetragon',
        45: 'tetracontakaipentagon',
        46: 'tetracontakaihexagon',
        47: 'tetracontakaiheptagon',
        48: 'tetracontakaioctagon',
        49: 'tetracontakaienneagon',
        50: 'pentacontagon',
        51: 'pentacontakaihenagon',
        52: 'pentacontakaidigon',
        53: 'pentacontakaitrigon',
        54: 'pentacontakaitetragon',
        55: 'pentacontakaipentagon',
        56: 'pentacontakaihexagon',
        57: 'pentacontakaiheptagon',
        58: 'pentacontakaioctagon',
        59: 'pentacontakaienneagon',
        60: 'hexacontagon',
        61: 'hexacontakaihenagon',
        62: 'hexacontakaidigon',
        63: 'hexacontakaitrigon',
        64: 'hexacontakaitetragon',
        65: 'hexacontakaipentagon',
        66: 'hexacontakaihexagon',
        67: 'hexacontakaiheptagon',
        68: 'hexacontakaioctagon',
        69: 'hexacontakaienneagon',
        70: 'heptacontagon',
        71: 'heptacontakaihenagon',
        72: 'heptacontakaidigon',
        73: 'heptacontakaitrigon',
        74: 'heptacontakaitetragon',
        75: 'heptacontakaipentagon',
        76: 'heptacontakaihexagon',
        77: 'heptacontakaiheptagon',
        78: 'heptacontakaioctagon',
        79: 'heptacontakaienneagon',
        80: 'octacontagon',
        81: 'octacontakaihenagon',
        82: 'octacontakaidigon',
        83: 'octacontakaitrigon',
        84: 'octacontakaitetragon',
        85: 'octacontakaipentagon',
        86: 'octacontakaihexagon',
        87: 'octacontakaiheptagon',
        88: 'octacontakaioctagon',
        89: 'octacontakaienneagon',
        90: 'enneacontagon',
        91: 'enneacontakaihenagon',
        92: 'enneacontakaidigon',
        93: 'enneacontakaitrigon',
        94: 'enneacontakaitetragon',
        95: 'enneacontakaipentagon',
        96: 'enneacontakaihexagon',
        97: 'enneacontakaiheptagon',
        98: 'enneacontakaioctagon',
        99: 'enneacontakaienneagon',
        100: 'hectogon',
        101: 'hectahenagon',
        200: 'dihectagon',
        300: 'trihectagon',
        400: 'tetrahectagon',
        500: 'pentahectagon',
        600: 'hexahectagon',
        700: 'heptahectagon',
        800: 'octahectagon',
        900: 'enneahectagon',
        1000: 'chiliagon',
        2000: 'dischiliagon',
        3000: 'trischiliagon',
        4000: 'tetrakischiliagon',
        5000: 'pentakischiliagon',
        6000: 'hexakischiliagon',
        7000: 'heptakischiliagon',
        8000: 'octakischiliagon',
        9000: 'enneakischiliagon',
        10000: 'myriagon',
        20000: 'dismyriagon',
        30000: 'trismyriagon',
        40000: 'tetrakismyriagon',
        50000: 'pentakismyriagon',
        60000: 'hexakismyriagon',
        70000: 'heptakismyriagon',
        80000: 'octakismyriagon',
        90000: 'enneakismyriagon',
        100000: 'decakismyriagon',
        200000: 'icosakismyriagon',
        300000: 'triacontakismyriagon',
        400000: 'tetracontakismyriagon',
        500000: 'pentacontakismyriagon',
        600000: 'hexacontakismyriagon',
        700000: 'heptacontakismyriagon',
        800000: 'octacontakismyriagon',
        900000: 'enneacontakismyriagon',
        1000000: 'hecatontakismyriagon',
        2000000: 'diacosakismyriagon',
        3000000: 'triacosakismyriagon',
        4000000: 'tetracosakismyriagon',
        5000000: 'pentacosakismyriagon',
        6000000: 'hexacosakismyriagon',
        7000000: 'heptacosakismyriagon',
        8000000: 'octacosakismyriagon',
        9000000: 'enneacosakismyriagon',
        10000000: 'chiliakismyriagon',
        20000000: 'dischiliakismyriagon',
        30000000: 'trischiliakismyriagon',
        40000000: 'tetrakischiliakismyriagon',
        50000000: 'pentakischiliakismyriagon',
        60000000: 'hexakischiliakismyriagon',
        70000000: 'heptakischiliakismyriagon',
        80000000: 'octakischiliakismyriagon',
        90000000: 'enneakischiliakismyriagon',
        100000000: 'myriakismyriagon'
    };

    for (const [n, name] of Object.entries(cases)) {
        t.is(numeralPrefix(Number(n), 'gon'), name);
    }
});

test('Should work with Infinity', t => {
    t.is(numeralPrefix(Number.POSITIVE_INFINITY, 'gon'), 'apeirogon');
    t.is(numeralPrefix(Infinity, 'gon'), 'apeirogon'); // eslint-disable-line unicorn/prefer-number-properties
});

test('Should work without suffix', t => {
    t.is(numeralPrefix(1), 'hena');
});

test('Should throw error for invalid values', t => {
    let error;
    error = t.throws(() => {
        numeralPrefix(0, 'gon');
    }, {
        instanceOf: Error
    });
    t.is(error.message, 'Number must be greater than zero');

    error = t.throws(() => {
        numeralPrefix(1.3, 'gon');
    }, {
        instanceOf: TypeError
    });
    t.is(error.message, 'Number must be integer');

    error = t.throws(() => {
        numeralPrefix('12', 'gon');
    }, {
        instanceOf: TypeError
    });
    t.is(error.message, 'Number must be integer');

    error = t.throws(() => {
        numeralPrefix(1000000000, 'gon');
    }, {
        instanceOf: Error
    });
    t.is(error.message, 'Number can\'t be greater than 999999999');
});