Skip to content

Commit

Permalink
Corrige função global filtrarPor
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelrvg committed Feb 25, 2024
1 parent 0c25a59 commit 0f228b8
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 14 deletions.
2 changes: 1 addition & 1 deletion fontes/bibliotecas/biblioteca-global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ export default function (interpretador: VisitanteComumInterface, pilhaEscoposExe
const resultados = [];
for (let indice = 0; indice < valorVetor.length; ++indice) {
const deveRetornarValor = await valorFuncaoFiltragem.chamar(interpretador, [valorVetor[indice]]);
if (deveRetornarValor === 'falso') continue;
if (deveRetornarValor === 'falso' || deveRetornarValor === false) continue;

resultados.push(valorVetor[indice]);
}
Expand Down
9 changes: 7 additions & 2 deletions fontes/interpretador/interpretador-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1605,6 +1605,11 @@ export class InterpretadorBase implements InterpretadorInterface {
return objeto ? 'verdadeiro' : 'falso';
}

if (objeto instanceof RetornoQuebra) {
if (typeof objeto.valor === 'boolean')
return objeto.valor ? 'verdadeiro' : 'falso';
}

if (objeto instanceof Date) {
const formato = Intl.DateTimeFormat('pt', {
dateStyle: 'full',
Expand All @@ -1616,11 +1621,11 @@ export class InterpretadorBase implements InterpretadorInterface {
if (Array.isArray(objeto)) {
let retornoVetor: string = '[';
for (let elemento of objeto) {
retornoVetor += `${this.paraTexto(elemento)},`;
retornoVetor += `${this.paraTexto(elemento)}, `;
}

if(retornoVetor.length > 1){
retornoVetor = retornoVetor.slice(0, -1);
retornoVetor = retornoVetor.slice(0, -2);
}
retornoVetor += ']';

Expand Down
10 changes: 5 additions & 5 deletions testes/biblioteca-global.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,16 +174,16 @@ describe('Biblioteca Global', () => {

it('Sucesso - filtrarPor', async () => {
const codigo = [
"var numeros = ['verdadeiro', 'falso', 'falso', 'verdadeiro']",
"var f = funcao(numero) { retorna numero == 'verdadeiro' }",
"var numerosFiltrados = filtrarPor(numeros, f)",
"escreva(numerosFiltrados)"
"var valoresLogicos = [verdadeiro, falso, falso, verdadeiro]",
"var f = funcao(valor) { retorna valor == verdadeiro }",
"var valoresVerdadeiros = filtrarPor(valoresLogicos, f)",
"escreva(valoresVerdadeiros)"
];
const retornoLexador = lexador.mapear(codigo, -1);
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: any) => {
expect(saida).toEqual('[\'verdadeiro\', \'verdadeiro\']');
expect(saida).toEqual('[verdadeiro, verdadeiro]');
};

const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
Expand Down
12 changes: 6 additions & 6 deletions testes/interpretador/interpretador.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1129,7 +1129,7 @@ describe('Interpretador', () => {
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: any) => {
expect(saida).toEqual('[1,2,3]');
expect(saida).toEqual('[1, 2, 3]');
};

const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
Expand All @@ -1151,7 +1151,7 @@ describe('Interpretador', () => {
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: any) => {
expect(saida).toEqual('[Olá,mundo]');
expect(saida).toEqual('[Olá, mundo]');
};

const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
Expand All @@ -1170,7 +1170,7 @@ describe('Interpretador', () => {
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: any) => {
expect(saida).toEqual('[maçã,banana,morango]');
expect(saida).toEqual('[maçã, banana, morango]');
};

const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
Expand Down Expand Up @@ -1383,8 +1383,8 @@ describe('Interpretador', () => {

expect(retornoInterpretador.erros).toHaveLength(0);
expect(saidas).toHaveLength(2);
expect(saidas[0]).toEqual('[a,b,c]');
expect(saidas[1]).toEqual('[1,2,3]');
expect(saidas[0]).toEqual('[a, b, c]');
expect(saidas[1]).toEqual('[1, 2, 3]');
});
});

Expand All @@ -1403,7 +1403,7 @@ describe('Interpretador', () => {
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: string) => {
expect(saida).toEqual('[12,8,4,2]');
expect(saida).toEqual('[12, 8, 4, 2]');
};

const retornoInterpretador = await interpretador.interpretar(
Expand Down

0 comments on commit 0f228b8

Please sign in to comment.