From 45294b83ef0bfa1aa9240baa4c0e70cf1c1c7109 Mon Sep 17 00:00:00 2001 From: Samuel Vaz Date: Tue, 30 Jan 2024 18:49:42 -0300 Subject: [PATCH] =?UTF-8?q?Primitivas=20de=20n=C3=BAmero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/bibliotecas/primitivas-numero.ts | 7 +++++++ fontes/interpretador/interpretador-base.ts | 8 ++++++++ testes/primitivas/primitivas-numero.test.ts | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 fontes/bibliotecas/primitivas-numero.ts create mode 100644 testes/primitivas/primitivas-numero.test.ts diff --git a/fontes/bibliotecas/primitivas-numero.ts b/fontes/bibliotecas/primitivas-numero.ts new file mode 100644 index 00000000..a0c7613c --- /dev/null +++ b/fontes/bibliotecas/primitivas-numero.ts @@ -0,0 +1,7 @@ +import { VisitanteComumInterface } from '../interfaces'; + +export default { + arredondarParaCima: (interpretador: VisitanteComumInterface, valor: number): Promise => { + return Promise.resolve(Math.ceil(valor)) + }, +}; diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts index 19485b71..bbf0586a 100644 --- a/fontes/interpretador/interpretador-base.ts +++ b/fontes/interpretador/interpretador-base.ts @@ -72,6 +72,7 @@ import { PilhaEscoposExecucaoInterface } from '../interfaces/pilha-escopos-execu import { inferirTipoVariavel } from './inferenciador'; import { MetodoPrimitiva } from '../estruturas/metodo-primitiva'; +import primitivasNumero from '../bibliotecas/primitivas-numero'; import primitivasTexto from '../bibliotecas/primitivas-texto'; import primitivasVetor from '../bibliotecas/primitivas-vetor'; import tiposDeSimbolos from '../tipos-de-simbolos/delegua'; @@ -1413,6 +1414,13 @@ export class InterpretadorBase implements InterpretadorInterface { } switch (tipoObjeto) { + case tipoDeDadosDelegua.INTEIRO: + case tipoDeDadosDelegua.NUMERO: + const metodoDePrimitivaNumero: Function = primitivasNumero[expressao.simbolo.lexema]; + if (metodoDePrimitivaNumero) { + return new MetodoPrimitiva(objeto, metodoDePrimitivaNumero); + } + break; case tipoDeDadosDelegua.TEXTO: const metodoDePrimitivaTexto: Function = primitivasTexto[expressao.simbolo.lexema]; if (metodoDePrimitivaTexto) { diff --git a/testes/primitivas/primitivas-numero.test.ts b/testes/primitivas/primitivas-numero.test.ts new file mode 100644 index 00000000..7c5424ad --- /dev/null +++ b/testes/primitivas/primitivas-numero.test.ts @@ -0,0 +1,20 @@ +import primitivasNumero from '../../fontes/bibliotecas/primitivas-numero'; +import { InterpretadorBase } from '../../fontes/interpretador'; + +describe('Primitivas de nĂºmero', () => { + let interpretador: InterpretadorBase; + + beforeEach(() => { + interpretador = new InterpretadorBase( + process.cwd(), + false + ) + }); + + describe('arredondarParaCima()', () => { + it('Trivial', async () => { + const resultado = await primitivasNumero.arredondarParaCima(interpretador, 2.5); + expect(resultado).toStrictEqual(3); + }); + }); +}); \ No newline at end of file