Skip to content

Commit

Permalink
Testes passam a usar entrada somente como texto. De fato, não existe …
Browse files Browse the repository at this point in the history
…entrada diretamente como número.
  • Loading branch information
leonelsanchesdasilva committed Feb 14, 2024
1 parent 3289480 commit ea086cc
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 24 deletions.
10 changes: 6 additions & 4 deletions fontes/interpretador/inferenciador.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export function inferirTipoVariavel(variavel: string | number | Array<any> | boolean | null | undefined) {
export type TipoInferencia = "texto" | "número" | "longo" | "vetor" | "dicionário" | "nulo" | "lógico" | "função" | "símbolo" | "objeto" | "módulo";

export function inferirTipoVariavel(variavel: string | number | Array<any> | boolean | null | undefined): TipoInferencia {
const tipo = typeof variavel;
switch (tipo) {
case 'string':
Expand All @@ -14,9 +16,9 @@ export function inferirTipoVariavel(variavel: string | number | Array<any> | boo
case 'object':
if (Array.isArray(variavel)) return 'vetor';
if (variavel === null) return 'nulo';
// if (variavel.constructor.name === 'DeleguaFuncao') return 'função';
// if (variavel.constructor.name === 'DeleguaModulo') return 'módulo';
// if (variavel.constructor.name === 'Classe') return 'objeto';
if (variavel.constructor.name === 'DeleguaFuncao') return 'função';
if (variavel.constructor.name === 'DeleguaModulo') return 'módulo';
if (variavel.constructor.name === 'Classe') return 'objeto';
return 'dicionário';
case 'function':
return 'função';
Expand Down
4 changes: 2 additions & 2 deletions fontes/interpretador/interpretador-visualg-com-depuracao.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import * as comum from './comum';
export class InterpretadorVisuAlgComDepuracao extends InterpretadorComDepuracao {
mensagemPrompt: string;

constructor(diretorioBase: string, funcaoDeRetorno: Function, funcaoDeRetornoMesmaLinha: Function) {
constructor(diretorioBase: string, funcaoDeRetorno: Function = null, funcaoDeRetornoMesmaLinha: Function = null) {
super(diretorioBase, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
this.mensagemPrompt = '> ';

Expand Down Expand Up @@ -158,7 +158,7 @@ export class InterpretadorVisuAlgComDepuracao extends InterpretadorComDepuracao

// Aqui precisamos clonar a declaração `Para` porque inserimos
// ao final dela o incremento. Diferente de declarações `Para` de
// outros dialetos, o incremento dessa declaração é implícito.
// outros dialetos, o incremento dessa declaração é implícito.
const cloneDeclaracao = _.cloneDeep(declaracao) as Para;
const corpoExecucao = cloneDeclaracao.corpo as Bloco;
// O incremento vai ao final do bloco de escopo.
Expand Down
8 changes: 4 additions & 4 deletions fontes/interpretador/interpretador-visualg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ export class InterpretadorVisuAlg extends InterpretadorBase {
constructor(
diretorioBase: string,
performance = false,
funcaoDeRetorno: Function,
funcaoDeRetornoMesmaLinha: Function
funcaoDeRetorno: Function = null,
funcaoDeRetornoMesmaLinha: Function = null
) {
super(diretorioBase, performance, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
this.mensagemPrompt = '> ';
Expand All @@ -43,11 +43,11 @@ export class InterpretadorVisuAlg extends InterpretadorBase {
throw new Error('Método não implementado.');
}

async visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any> {
override async visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any> {
return await comum.visitarExpressaoAcessoElementoMatriz(this, expressao);
}

async visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any> {
override async visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any> {
return await comum.visitarExpressaoAtribuicaoPorIndicesMatriz(this, expressao);
}

Expand Down
52 changes: 38 additions & 14 deletions testes/interpretador.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('Interpretador', () => {
const saidasMensagens = ['verdadeiro', 'num1 não é maior que 0', 'num1 não é maior que 0', 'num1 é maior que 0']
// Aqui vamos simular a resposta para três variáveis de `leia()`.
const respostas = [
-1, -2, 1
"-1", "-2", "1"
];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
Expand Down Expand Up @@ -136,9 +136,9 @@ describe('Interpretador', () => {
expect(retornoInterpretador.erros).toHaveLength(0);
});

it('Sucesso - Leia', async () => {
it.skip('Sucesso - Leia', async () => {
// Aqui vamos simular a resposta para cinco variáveis de `leia()`.
const respostas = [1, 2, 3, 4, 5];
const respostas = ["1", "2", "3", "4", "5"];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
callback(respostas.shift());
Expand Down Expand Up @@ -168,7 +168,7 @@ describe('Interpretador', () => {

it('Sucesso - Equação Segundo Grau', async () => {
const saidasMensagens = ['Informe o valor de A: ', 'Informe o valor de B: ', 'Informe o valor de C: ', 'Esta equação não possui raízes reais.']
const respostas = [10, 21, 14];
const respostas = ["10", "21", "14"];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
callback(respostas.shift());
Expand Down Expand Up @@ -221,7 +221,7 @@ describe('Interpretador', () => {

it('Sucesso - "Repita Até" com acento', async () => {
const saidasMensagens = ['1 - Dizer olá!', '2 – Dizer oi! ', '0 - Sair do programa']
const respostas = [0];
const respostas = ["0"];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
callback(respostas.shift());
Expand Down Expand Up @@ -262,7 +262,7 @@ describe('Interpretador', () => {
it('Sucesso - IMC', async () => {
const saidasMensagens = ['Massa(Kg): ', 'Altura (m): ', 'Parabens! Voce esta no seu peso ideal']
// Aqui vamos simular a resposta para duas variáveis de `leia()`.
const respostas = [78, 1.78];
const respostas = ["78", "1.78"];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
callback(respostas.shift());
Expand Down Expand Up @@ -305,11 +305,34 @@ describe('Interpretador', () => {
});

it("Sucesso - Média de Vetor", async () => {
const saidasMensagens = ['Digite a nota do1º Aluno', 'Digite a nota do2º Aluno', 'Digite a nota do3º Aluno', 'Digite a nota do4º Aluno', 'Digite a nota do5º Aluno', 'Digite a nota do6º Aluno', 'Digite a nota do7º Aluno', 'Digite a nota do8º Aluno', 'Digite a nota do9º Aluno', 'Digite a nota do10º Aluno', '-', 'Media do1º aluno: 90.5', 'Media do2º aluno: 83.5', 'Media do3º aluno: 71.5', 'Media do4º aluno: 94.5', 'Media do5º aluno: 76.5', 'Media do6º aluno: 90', 'Media do7º aluno: 80', 'Media do8º aluno: 65', 'Media do9º aluno: 75', 'Media do10º aluno: 85']
const saidasMensagens = [
'Digite a nota do 1º Aluno',
'Digite a nota do 2º Aluno',
'Digite a nota do 3º Aluno',
'Digite a nota do 4º Aluno',
'Digite a nota do 5º Aluno',
'Digite a nota do 6º Aluno',
'Digite a nota do 7º Aluno',
'Digite a nota do 8º Aluno',
'Digite a nota do 9º Aluno',
'Digite a nota do 10º Aluno',
'-',
'Media do 1º aluno: 90.5',
'Media do 2º aluno: 83.5',
'Media do 3º aluno: 71.5',
'Media do 4º aluno: 94.5',
'Media do 5º aluno: 76.5',
'Media do 6º aluno: 90',
'Media do 7º aluno: 80',
'Media do 8º aluno: 65',
'Media do 9º aluno: 75',
'Media do 10º aluno: 85'
];

// Aqui vamos simular a resposta para duas variáveis de `leia()`.
const respostas = [
90, 80, 50, 100, 60, 70, 75, 85, 89, 91,
74, 79, 99, 90, 65, 78, 100, 67, 93, 88
"90", "80", "50", "100", "60", "70", "75", "85", "89", "91",
"74", "79", "99", "90", "65", "78", "100", "67", "93", "88"
];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
Expand All @@ -325,13 +348,13 @@ describe('Interpretador', () => {
'n1,n2:real',
'inicio',
'para i de 1 ate 10 faca',
' escreval ("Digite a nota do",i,"º Aluno")',
' escreval ("Digite a nota do ",i,"º Aluno")',
' leia (n1,n2)',
' media[i]<-(n1+n2)/2',
'fimpara',
'escreval ("-")',
'para i de 1 ate 10 faça',
' escreval ("Media do",i,"º aluno: ", media[i])',
' escreval ("Media do ",i,"º aluno: ", media[i])',
'fimpara',
'fimalgoritmo'
], -1);
Expand Down Expand Up @@ -395,11 +418,12 @@ describe('Interpretador', () => {
expect(retornoInterpretador.erros).toHaveLength(0);
});

// TODO: Loop infinito.
it('Sucesso - Para com passo negativo', async () => {
const saidasMensagens = ['Digite um valor: ', '10', '8', '6', '4', '2', '0']
// Aqui vamos simular a resposta para uma variável de `leia()`.
const respostas = [
10
"10"
];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
Expand Down Expand Up @@ -437,7 +461,7 @@ describe('Interpretador', () => {
const saidasMensagens = ['---------------------------', 'Digite o1º numero: ', 'Você deseja inserir mais um número? (S/N)', '---------------------------', 'Digite o2º numero: ', '---------------------------', 'Digite o3º numero: ', '---------------------------', 'Digite o4º numero: ', 'Valores repetidos não serão computados.', 'Você deseja inserir mais um número? (S/N)', '---------------------------', 'Digite o4º numero: ', '---------------------------', 'Digite o5º numero: ', 'Valores repetidos não serão computados.', 'Você deseja inserir mais um número? (S/N)']
// Aqui vamos simular a resposta para doze variáveis de `leia()`.
const respostas = [
2, 'S', 5, 'S', 6, 'S', 5, 'S', 3, 'S', 5, 'N'
"2", 'S', "5", 'S', "6", 'S', "5", 'S', "3", 'S', "5", 'N'
];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
Expand Down Expand Up @@ -494,7 +518,7 @@ describe('Interpretador', () => {
const saidasMensagens = ['Digite dois valores: ', 'A variavel escolhida é 3']
// Aqui vamos simular a resposta para duas variáveis de `leia()`.
const respostas = [
2, 3
"2", "3"
];
interpretador.interfaceEntradaSaida = {
question: (mensagem: string, callback: Function) => {
Expand Down

0 comments on commit ea086cc

Please sign in to comment.