Skip to content

Conversation

The3rdMega
Copy link
Contributor

Este Pull Request corresponde a entrega do Projeto final da Matéria de Técnicas de Programação 2 com o Professor Rodrigo Bonifácio, no semestre de 2025.1.

Membros do Grupo:

  • Arthur Luiz Lima de Araújo - 232000472,
  • Michele Nakagomi Lebarbenchon - 232029078,
  • Carlos Victor Albuquerque Oliveira - 232009558,
  • Pedro Augusto Machado Cardoso - 222011580,
  • Erica Martins Feitosa - 231003470.

Modificações Feitas

Environment:

  • Escopo do Environment agora armazena Definições de Testes no IndexMap "tests";
  • Implementadas funções scrape_tests, lookup_test e map_test para interagir com os Testes no Escopo;
  • Criado a estrutura TestResult, que contém (name: Name, result: bool, error: Option), representando resultados da execução de uma função de teste.

Parser:

  • Suporta Escrita de Definição de testes:
  • Testes são escritos com o formato "test nome_do_teste(): corpo_do_teste; end";
  • Não é permitido declarar tipo de retorno ou argumentos para o teste;
  • Suporta Escrita de Asserts (assert, asserttrue, assertfalse, asserteq, assertneq):
  • Parser garante que o número de argumentos do respectivo assert seja correto, e que todos os campos estejam preenchidos;

TypeChecker:

  • Suporta Checagem de Definição de testes:
  • Testes devem ter tipo de retorno TVoid, não podem ter o mesmo nome que um teste já declarado e não devem possuir parâmetros, além de que o corpo do teste é checado pela função padrão do TypeChecker;
  • Suporta Checagem de Asserts (assert, asserttrue, assertfalse, asserteq, assertneq):
  • Primeiros Argumentos de Asserts devem ser do tipo TBool, e o último argumento (mensagem de erro) deve ser TString;

Interpreter:

  • Suporta Definição de Testes (Mapeia o teste no escopo correto);
  • Suporta Execução de Asserts(assert, asserttrue, assertfalse, asserteq, assertneq):
  • Asserts que passam continuam a execução sem alterar nada;
  • Asserts que falham retornam um erro em tempo de execução com a mensagem de erro inserida em seus argumentos;
  • Suporta Execução de Testes:
  • A função run_tests executa o programa inteiro e depois executa todos os testes declarados no programa em um escopo separado criado em cima do environment gerado pelo programa, assim armazenando todos os resultados em um vetor de TestResult.

Testes Unitários:

  • Criados múltiplos testes unitários em cada módulo para confirmar a funcionalidade de todas as features implementadas acima.

Novas Dependências

  • IndexMap

Quality of Life:

  • Estrutura ModTests na AST.rs não foi removida, para talvez futura implementação.

The3rdMega and others added 19 commits June 20, 2025 12:24
Este commit adiciona a função parse_test_function_definition_statement, que realiza o parser de TestDef em r-python, bem como testes para garantir que o parser funcione corretamente.

Este commit também altera a função parse_function_definition_statement, para rejeitar funções cujo identificador se inicia com "test", também possuindo um teste para realizar esta checagem.

Observações:
- Parser de Declaração de Funções comuns está quebrado, isso dado a função keyword, que está consumindo o espaço após de KEYWORD_DEF e assumindo que def é uma palavra maior, quebrando parsers que utilizam a keyword def.
…unções de teste

Agora retornamos Error<input> ao invés de Error<name>, para retornar no erro a string original de texto no parser que deu erro
Ainda falta implementar testes para os Asserts
Asserts executam no interpretador e retornam um Computation Continue caso passem ou Erro caso falhem. Environments podem armazenar declaração de testes (ainda a ser implementado pelo TestDef)
Testes agora armazenam TestResult no environment.

A função run_tests no interpretador recebe um programa, executa ele por inteiro e depois roda todos os testes presentes no programa, retornando um Vec<TestResult>

Testes definidos em um programa são armazenados no escopo no hashmap tests.

Vec<TestResult> ainda não está sendo armazenado no environment. Mas é possível implementar de maneira indolor.

Interpretador de Asserts finalizada, agora eles retornam Computation::Continue ou Err(e), com a string de erro presente dentro do Assert.

Cargo.toml agora requer uso de IndexMap para armazenar TestResults ordenados na ordem de definição dos testes.
Alterado lookup_function -> lookup_test
Alterado map_function -> map_test
Adicionada a função auxiliar check_block para validar blocos com escopo.

Refatorada check_test_function_stmt para usar check_block, corrigir ownership e utilizar lookup_test/map_test.

Criada suíte de testes unitários cobrindo casos válidos e inválidos para TestDef.
- Separados os testes a apresentar para o Bonifácio em Módulos para fácil acesso.
- Adicionados TODO's para fácil navegação do código na apresentação.
- Testes do TypeChecker de TesteDef agora checam se a mensagem de erro foi a mensagem desejada.
@rbonifacio rbonifacio merged commit 6ba52f8 into UnBCIC-TP2:main Jul 25, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants