/project-li3

Data-parsing program for reading and interpreting csv files using efficient modular design within Computer Labs III environment.

Primary LanguageCGNU General Public License v3.0GPL-3.0

Automatic testing Valgrind

Projeto LI3

Este projeto resultou no desenvolvimento de um programa para leitura e interpretação de três ficheiros de entrada: users.csv, drivers.csv e rides.csv.

A aplicação foi dividida em módulos que realizam as seguintes tarefas:

  • Parsing de dados
  • Interpretação de comandos
  • Armazenamento de informações em catálogos:
    • Usuários
    • Motoristas
    • Viagens
    • Estatísticas

Cada catálogo é responsável por armazenar informações relevantes dos ficheiros de entrada, enquanto o módulo de estatísticas permite relacionar os principais modelos e fornecer acesso rápido a dados e resultados.

Arquitetura do projeto

Diagrama

Relatórios

Requerimentos

  • glib2 para manipulação das coleções de dados;
Instalação
apt install gcc make libglib2.0-dev libgtk2.0-dev gdb valgrind -y

Utilização

cd trabalho-pratico/
make

Modo Batch:

./programa-principal <dir_with_csvs> <input_file_path> 

Modo Interativo:

./programa-principal
Exemplo de utilização
Enter dataset path: dataset
Number of drivers parsed: 10000
Number of users parsed:  100000
Number of rides parsed: 1000000
$ 1 SaCruz110
Santiago Cruz;M;31;3.200;5;50.340
$ 3 2    
Anita-PetPinto38;Anita-Petra Pinto;240
REsteves70;Raquel Esteves;234
$ 4 Braga
10.062
$ (Ctrl + D) 
Exit with success

Testagem

programa-testes:

make programa-testes
./programa-testes <dir_with_csvs> <dir_with_input_and_outputs>
Exemplo de output
Teste de desempenho - Parsing dos dados
Number of drivers parsed: 10000
Number of users parsed:  100000
Number of rides parsed: 1000000
Parsing data time: 4.11s

Teste de desempenho - Avaliação de queries
Query 1 | 0.00000075s | "1 SaCruz110"
Query 2 | 0.00000800s | "2 50"
Query 3 | 0.00000600s | "3 50"
Query 4 | 0.00000025s | "4 Braga"
Query 5 | 0.01275250s | "5 01/01/2021 01/02/2021"
Query 6 | 0.02461975s | "6 Porto 01/01/2021 01/02/2021"
Query 7 | 0.00000700s | "7 50 Lisboa"
Query 8 | 0.00283650s | "8 M 12"
Query 9 | 0.01340325s | "9 01/01/2021 01/02/2021"

Teste funcional - Validação de queries
command1_output.txt:	Pass ✔
command2_output.txt:	Pass ✔
command3_output.txt:	Pass ✔
command4_output.txt:	Pass ✔
command5_output.txt:	Pass ✔
command6_output.txt:	Pass ✔
command7_output.txt:	Pass ✔
command8_output.txt:	Pass ✔
command9_output.txt:	Pass ✔
command10_output.txt:	Pass ✔
command11_output.txt:	Pass ✔
command12_output.txt:	Pass ✔
command13_output.txt:	Pass ✔
command14_output.txt:	Pass ✔
command15_output.txt:	Pass ✔
command16_output.txt:	Pass ✔
command17_output.txt:	Pass ✔
command18_output.txt:	Pass ✔
command19_output.txt:	Pass ✔

malloc_stats
Arena 0:
system bytes     =  550182912
in use bytes     =  550137440
Total (incl. mmap):
system bytes     = 1071362048
in use bytes     = 1071316576
max mmap regions =         30
max mmap bytes   =  588943360

malloc_stats after freeing memory
Arena 0:
system bytes     =  550182912
in use bytes     =  259894208
Total (incl. mmap):
system bytes     = 1021255680
in use bytes     =  730966976
max mmap regions =         30
max mmap bytes   =  588943360

Debug

make debug
gdb ./programa-principal
valgrind ./programa-principal <dir_with_csvs> <input_file_path>

Time

command time -v ./programa-principal <dir_with_csvs> <input_file_path>

Memusage

memusage ./programa-principal <dir_with_csvs> <input_file_path>