# 📊 Test Coverage Summary ## VisĂŁo Geral dos Testers Este documento resume a cobertura de testes para cada exercĂ­cio preparatĂłrio do Philosophers. --- ## 📝 ExercĂ­cio 1: Thread Basics **Arquivo**: `test_1_thread_basics.sh` ### Testes Implementados: 1. ✅ Execução bĂĄsica com 1 mensagem 2. ✅ MĂșltiplas mensagens (5) 3. ✅ NĂșmero grande de mensagens (10) 4. ✅ Verificação de memory leaks (valgrind) ### O que Ă© verificado: - Thread 1 e Thread 2 criam mensagens corretas - NĂșmero correto de mensagens por thread - Threads fazem join corretamente --- ## 🔒 ExercĂ­cio 2: Mutex Basics **Arquivo**: `test_2_mutex_basics.sh` ### Testes Implementados: 1. ✅ Valor do contador (deve ser 4000) 2. ✅ Teste de consistĂȘncia (5 execuçÔes) 3. ✅ Tempo de execução reportado 4. ✅ Detecção de data races (thread sanitizer) 5. ✅ Memory leaks ### O que Ă© verificado: - Mutex protege corretamente a variĂĄvel compartilhada - Resultado Ă© sempre 4000 (sem race conditions) - Thread sanitizer nĂŁo detecta problemas --- ## ⏱ ExercĂ­cio 3: Precise Timing **Arquivo**: `test_3_precise_timing.sh` ### Testes Implementados: 1. ✅ Programa executa com sucesso 2. ✅ PrecisĂŁo do sleep (~100ms ±5ms) 3. ✅ ConsistĂȘncia atravĂ©s de 5 execuçÔes 4. ✅ Formato do output 5. ✅ Memory leaks ### O que Ă© verificado: - Sleep preciso de 100ms - Margem de erro aceitĂĄvel (95-105ms) - FunçÔes de timing funcionam corretamente --- ## 📡 ExercĂ­cio 4: State Monitor **Arquivo**: `test_4_state_monitor.sh` ### Testes Implementados: 1. ✅ Execução do programa 2. ✅ TransiçÔes de estado (WORKING, RESTING, THINKING) 3. ✅ Timestamps presentes 4. ✅ 3 workers identificados 5. ✅ Duração de estados verificada 6. ✅ Monitor thread funcionando 7. ✅ Memory leaks 8. ✅ Data races ### O que Ă© verificado: - 3 workers + 1 monitor - Estados mudam corretamente - Monitor detecta workers travados --- ## 🏭 ExercĂ­cio 5: Producer-Consumer **Arquivo**: `test_5_producer_consumer.sh` ### Testes Implementados: 1. ✅ Programa completa execução 2. ✅ Produtores funcionando 3. ✅ Consumidores funcionando 4. ✅ Items 1-100 produzidos 5. ✅ GestĂŁo de buffer 6. ✅ Sem duplicação de consumo 7. ✅ Data races 8. ✅ Memory leaks ### O que Ă© verificado: - 2 produtores + 2 consumidores - Buffer de 10 items funciona - Todos os 100 items sĂŁo processados - Sem race conditions --- ## 🔮 ExercĂ­cio 6: Deadlock Demo **Arquivo**: `test_6_deadlock_demo.sh` ### Testes Implementados: 1. ✅ Modo deadlock (deve travar) 2. ✅ Modo solução (deve completar) 3. ✅ Output da solução 4. ✅ Ambas threads completam 5. ✅ ConsistĂȘncia da solução (5 runs) 6. ✅ Uso de mutex 7. ✅ Handling de argumentos invĂĄlidos 8. ✅ Memory leaks ### O que Ă© verificado: - Deadlock Ă© demonstrado no modo 0 - Solução funciona no modo 1 - Ordem consistente de locks previne deadlock --- ## 🎯 ExercĂ­cio 7: Limited Resources **Arquivo**: `test_7_limited_resources.sh` ### Testes Implementados: 1. ✅ Programa completa 2. ✅ 10 estudantes presentes 3. ✅ Mensagens de chegada 4. ✅ Obtenção de computadores 5. ✅ Mensagens de saĂ­da 6. ✅ Limite de 3 recursos simultĂąneos 7. ✅ Fairness (nenhum starved) 8. ✅ Data races 9. ✅ Memory leaks ### O que Ă© verificado: - SemĂĄforo implementado com mutex - MĂĄximo 3 usuĂĄrios simultĂąneos - Todos os 10 estudantes usam o recurso --- ## đŸœïž ExercĂ­cio 8: Simple Philosophers **Arquivo**: `test_8_simple_philosophers.sh` ### Testes Implementados: 1. ✅ Duração do programa (~10s) 2. ✅ 3 filĂłsofos presentes 3. ✅ AçÔes de pensar 4. ✅ AçÔes de comer 5. ✅ Timestamps 6. ✅ Todos os filĂłsofos comem 7. ✅ Sem mortes 8. ✅ Data races 9. ✅ Sem deadlock (3 runs) 10. ✅ Memory leaks ### O que Ă© verificado: - 3 filĂłsofos, 3 garfos - Ciclo thinking → eating funciona - Ordem de garfos previne deadlock - Programa roda ~10 segundos --- ## ☠ ExercĂ­cio 9: Death Monitor **Arquivo**: `test_9_death_monitor.sh` ### Testes Implementados: 1. ✅ Execução do programa 2. ✅ 4 workers presentes 3. ✅ Atividade dos workers 4. ✅ Monitor thread 5. ✅ Detecção de morte 6. ✅ Timestamps 7. ✅ Tracking de last_activity 8. ✅ Data races 9. ✅ ConsistĂȘncia (3 runs) 10. ✅ Memory leaks ### O que Ă© verificado: - Monitor verifica a cada 100ms - Detecta "morte" apĂłs 3s de inatividade - Mutex protege last_activity_time --- ## 🎓 ExercĂ­cio 10: Philosophers Args (Completo) **Arquivo**: `test_10_philosophers_args.sh` ### Testes Implementados: 1. ✅ Caso bĂĄsico (5 800 200 200) - sem mortes 2. ✅ CenĂĄrio de morte (4 310 200 100) 3. ✅ Limite de refeiçÔes (5 800 200 200 7) 4. ✅ FilĂłsofo sozinho (deve morrer) 5. ✅ Argumentos invĂĄlidos 6. ✅ IDs de filĂłsofos vĂĄlidos 7. ✅ Timestamps crescentes 8. ✅ Timing de detecção de morte 9. ✅ Data races 10. ✅ NĂșmero Ă­mpar de filĂłsofos 11. ✅ Memory leaks ### O que Ă© verificado: - Parsing completo de argumentos - Detecção de morte funciona - Limite de refeiçÔes funciona - Casos edge (1 philo, timing apertado) - Timestamps sĂŁo monotĂŽnicos --- ## 🔍 ExercĂ­cio 11: Race Detector **Arquivo**: `test_11_race_detector.sh` ### Testes Implementados: 1. ✅ Execução bĂĄsica 2. ✅ MĂșltiplas iteraçÔes 3. ✅ RelatĂłrio de estatĂ­sticas 4. ✅ Diferentes estratĂ©gias 5. ✅ Helgrind check 6. ✅ NĂșmero Ă­mpar de filĂłsofos 7. ✅ Timing apertado 8. ✅ MĂ©tricas de performance 9. ✅ Thread sanitizer 10. ✅ Memory leaks ### O que Ă© verificado: - Testa 100 iteraçÔes - Compara estratĂ©gias A, B, C - Reporta races, deaths, performance - Helgrind/DRD detectam problemas --- ## 🌟 ExercĂ­cio 12: Philosophers Bonus **Arquivo**: `test_12_philosophers_bonus.sh` ### Testes Implementados: 1. ✅ Caso bĂĄsico com processos 2. ✅ Usa fork() (nĂŁo threads) 3. ✅ Usa semĂĄforos POSIX 4. ✅ CenĂĄrio de morte 5. ✅ Limite de refeiçÔes 6. ✅ FilĂłsofo sozinho 7. ✅ Argumentos invĂĄlidos 8. ✅ Cleanup de processos (no zombies) 9. ✅ Cleanup de semĂĄforos 10. ✅ EstatĂ­sticas finais 11. ✅ Helgrind no processo pai ### O que Ă© verificado: - Usa processos (fork) em vez de threads - SemĂĄforos POSIX (sem_open, sem_wait, sem_post) - Cleanup correto (sem_unlink) - Signal handling (SIGINT, SIGTERM) - Sem processos zombie --- ## 🎯 EstatĂ­sticas Gerais ### Total de Testes: - **ExercĂ­cio 1**: 4 testes - **ExercĂ­cio 2**: 5 testes - **ExercĂ­cio 3**: 5 testes - **ExercĂ­cio 4**: 8 testes - **ExercĂ­cio 5**: 8 testes - **ExercĂ­cio 6**: 8 testes - **ExercĂ­cio 7**: 9 testes - **ExercĂ­cio 8**: 10 testes - **ExercĂ­cio 9**: 10 testes - **ExercĂ­cio 10**: 11 testes - **ExercĂ­cio 11**: 10 testes - **ExercĂ­cio 12**: 11 testes **TOTAL**: ~99 testes automatizados ### Categorias de Testes: - ✅ Funcionalidade bĂĄsica: 12/12 exercĂ­cios - ✅ Memory leaks (valgrind): 12/12 exercĂ­cios - ✅ Data races (sanitizer): 10/12 exercĂ­cios - ✅ Edge cases: 10/12 exercĂ­cios - ✅ ConsistĂȘncia: 8/12 exercĂ­cios - ✅ Performance: 2/12 exercĂ­cios ### Ferramentas Utilizadas: - `gcc` - Compilação e thread sanitizer - `valgrind` - Memory leak detection - `helgrind` - Data race detection (avançado) - `timeout` - Detecção de deadlocks/hangs - `grep/sed/awk` - Parsing de output - `ps` - Verificação de processos zombie --- ## 🔑 Conceitos-Chave Testados ### Threading: - [x] pthread_create - [x] pthread_join - [x] pthread_detach - [x] Thread arguments - [x] Multiple threads ### Synchronization: - [x] pthread_mutex_init/destroy - [x] pthread_mutex_lock/unlock - [x] Critical sections - [x] Race conditions - [x] Deadlock prevention ### Timing: - [x] gettimeofday - [x] Precise sleep - [x] Timestamp generation - [x] Time difference calculation ### Processes (Bonus): - [x] fork() - [x] waitpid() - [x] kill() - [x] Signal handling - [x] Process cleanup ### Semaphores (Bonus): - [x] sem_open - [x] sem_wait/sem_post - [x] sem_close/sem_unlink - [x] Named semaphores ### Philosophers-Specific: - [x] Circular resource allocation - [x] Death detection - [x] Meal counting - [x] State transitions - [x] Monitor pattern - [x] Fork ordering (deadlock prevention) --- ## 📈 NĂ­veis de Dificuldade ### Iniciante (ExercĂ­cios 1-3): - Thread Basics ⭐ - Mutex Basics ⭐ - Precise Timing ⭐⭐ ### IntermediĂĄrio (ExercĂ­cios 4-7): - State Monitor ⭐⭐ - Producer-Consumer ⭐⭐⭐ - Deadlock Demo ⭐⭐ - Limited Resources ⭐⭐⭐ ### Avançado (ExercĂ­cios 8-10): - Simple Philosophers ⭐⭐⭐⭐ - Death Monitor ⭐⭐⭐⭐ - Philosophers Args ⭐⭐⭐⭐⭐ ### Expert (ExercĂ­cios 11-12): - Race Detector ⭐⭐⭐⭐⭐ - Philosophers Bonus ⭐⭐⭐⭐⭐ --- ## ✹ PrĂłximos Passos Depois de completar todos os exercĂ­cios: 1. **Revise conceitos**: - Data races e como evitĂĄ-los - Deadlock e estratĂ©gias de prevenção - Timing preciso e monitoramento 2. **Pratique casos edge**: - 1 filĂłsofo - 2 filĂłsofos - NĂșmeros grandes (200+ filĂłsofos) - Timing muito apertado 3. **Otimize**: - Minimize tempo dentro de locks - Balance entre precisĂŁo e performance - Evite busy waiting 4. **Teste rigorosamente**: ```bash valgrind --tool=helgrind ./philo 4 410 200 200 valgrind --leak-check=full ./philo 5 800 200 200 7 ``` 5. **Prepare para o projeto real**: - Norminette - Makefile correto - Error handling robusto - CĂłdigo limpo e documentado Boa sorte! 🚀