numero-por-extenso
Version:
Escreve números por extenso: normais, monetários e porcentagens.
96 lines (79 loc) • 5.58 kB
JavaScript
const numero = require('../index'),
assert = require('assert');
let test = (description, assertTest) => {
it(description, (done) => {
try {
assertTest();
done();
} catch (e) {
done(e);
}
});
};
describe('testando estilo normal', () => {
test('escrevendo do 0 ao 9', () => {
['zero', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove']
.forEach((n, i) => assert.equal(numero.porExtenso(i), n));
});
test('escrevendo do 10 ao 19', () => {
['dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove']
.forEach((n, i) => assert.equal(numero.porExtenso(i + 10), n))
});
test('escrevendo dezenas', () => {
['dez', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa']
.forEach((n, i) => assert.equal(numero.porExtenso((i + 1) * 10), n))
});
test('escrevendo centenas', () => {
['cem', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos']
.forEach((n, i) => assert.equal(numero.porExtenso((i + 1) * 100), n))
});
test('escrevendo milhares', () => {
assert.equal(numero.porExtenso(1000), 'um mil');
assert.equal(numero.porExtenso(2000), 'dois mil');
});
test('escrevendo dezenas de milhares', () => {
assert.equal(numero.porExtenso(10000), 'dez mil');
assert.equal(numero.porExtenso(30000), 'trinta mil');
});
test('escrevendo centenas de milhares', () => {
['cem', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos']
.forEach((n, i) => assert.equal(numero.porExtenso(((i + 1) * 100000)), n + ' mil'));
});
test('escrevendo números negativos', () => {
assert.equal(numero.porExtenso(-1), 'menos um');
assert.equal(numero.porExtenso(-200), 'menos duzentos');
assert.equal(numero.porExtenso(-0.5), 'menos zero vírgula cinco décimos');
});
});
describe('testando README.md', () => {
test('escrevendo exemplos', () => {
// Números inteiros
assert.equal(numero.porExtenso(128), 'cento e vinte e oito');
assert.equal(numero.porExtenso(128, numero.estilo.monetario), 'cento e vinte e oito reais');
assert.equal(numero.porExtenso(128, numero.estilo.porcentagem), 'cento e vinte e oito por cento');
// Números decimais
assert.equal(numero.porExtenso(10.50), 'dez vírgula cinco décimos');
assert.equal(numero.porExtenso(10.50, numero.estilo.monetario), 'dez reais e cinquenta centavos');
assert.equal(numero.porExtenso(10.50, numero.estilo.porcentagem), 'dez vírgula cinco décimos por cento');
// Números gigantes
assert.equal(numero.porExtenso(9_876_543_210), 'nove bilhões oitocentos e setenta e seis milhões quinhentos e quarenta e três mil duzentos e dez');
assert.equal(numero.porExtenso(-87_654_321, numero.estilo.monetario), 'menos oitenta e sete milhões seiscentos e cinquenta e quatro mil trezentos e vinte e um reais');
assert.equal(numero.porExtenso(123_456.7891, numero.estilo.porcentagem), 'cento e vinte e três mil quatrocentos e cinquenta e seis vírgula sete mil oitocentos e noventa e um décimos de milésimo por cento');
// Maior número possível (type number)
assert.equal(numero.porExtenso(999_999_999_999_999.9), 'novecentos e noventa e nove trilhões novecentos e noventa e nove bilhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove vírgula nove décimos');
// Maior número possível (type string)
assert.equal(numero.porExtenso('999999999999999999999999999999999999999999999.99999999999999999999'), 'novecentos e noventa e nove tredecilhões novecentos e noventa e nove duodecilhões novecentos e noventa e nove undecilhões novecentos e noventa e nove decilhões novecentos e noventa e nove nonilhões novecentos e noventa e nove octilhões novecentos e noventa e nove septilhões novecentos e noventa e nove sextilhões novecentos e noventa e nove quintilhões novecentos e noventa e nove quatrilhões novecentos e noventa e nove trilhões novecentos e noventa e nove bilhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove vírgula noventa e nove quintilhões novecentos e noventa e nove quatrilhões novecentos e noventa e nove trilhões novecentos e noventa e nove bilhões novecentos e noventa e nove milhões novecentos e noventa e nove mil novecentos e noventa e nove centésimos de quintilionésimo');
});
});
describe('Issue #1', () => {
test('escrevendo 1.000.090.000,00', () => {
assert.equal(numero.porExtenso('1000090000.00', numero.estilo.monetario), 'um bilhão e noventa mil reais');
});
});
describe('Issue #4', () => {
test('escrevendo percentuais com zeros a esquerda', () => {
assert.equal(numero.porExtenso(3.01, numero.estilo.porcentagem), 'três vírgula um centésimo por cento');
assert.equal(numero.porExtenso(50.05, numero.estilo.porcentagem), 'cinquenta vírgula cinco centésimos por cento');
assert.equal(numero.porExtenso(1.049, numero.estilo.porcentagem), 'um vírgula quarenta e nove milésimos por cento');
});
});