calculator_henriquecapi/lib.rs
1pub mod calc1;
2pub mod calc2;
3
4#[cfg(test)]
5mod tests {
6 // Importamos todas as funções que vamos testar
7 use super::calc1::{add, sub};
8 use super::calc2::{multiply, rate};
9
10 // --- Testes para a função add ---
11 #[test]
12 fn test_add_normal() {
13 // Testa uma soma simples que deve funcionar
14 assert_eq!(add(2, 2), 4);
15 }
16
17 #[test]
18 fn test_add_saturating() {
19 // Testa se a soma satura no valor máximo de u32 em vez de estourar (overflow)
20 assert_eq!(add(u32::MAX, 1), u32::MAX);
21 }
22
23 // --- Testes para a função sub ---
24 #[test]
25 fn test_sub_normal() {
26 // Testa uma subtração simples
27 assert_eq!(sub(10, 5), 5);
28 }
29
30 #[test]
31 fn test_sub_underflow_returns_zero() {
32 // Testa o caso onde o resultado seria negativo.
33 // A função deve retornar 0 para evitar um "underflow".
34 assert_eq!(sub(5, 10), 0);
35 }
36
37 // --- Testes para a função multiply ---
38 #[test]
39 fn test_multiply_normal() {
40 // Testa uma multiplicação simples
41 assert_eq!(multiply(10, 5), 50);
42 }
43
44 #[test]
45 fn test_multiply_by_zero() {
46 // Multiplicar por zero deve sempre resultar em zero
47 assert_eq!(multiply(10, 0), 0);
48 }
49
50 #[test]
51 fn test_multiply_overflow() {
52 // Este teste vai falhar inicialmente, pois a multiplicação padrão causa pânico.
53 // Ele serve para nos forçar a melhorar a função `multiply`.
54 assert_eq!(multiply(u32::MAX, 2), u32::MAX);
55 }
56
57 // --- Testes para a função rate (divisão) ---
58 #[test]
59 fn test_rate_normal() {
60 // Testa uma divisão simples
61 assert_eq!(rate(10, 2), 5);
62 }
63
64 #[test]
65 fn test_rate_integer_truncation() {
66 // A divisão de inteiros descarta a parte fracionária. 10 / 3 = 3.33..., que vira 3.
67 assert_eq!(rate(10, 3), 3);
68 }
69
70 #[test]
71 fn test_rate_division_by_zero_returns_zero() {
72 // A nossa função foi programada para retornar 0 em caso de divisão por zero.
73 // Este teste garante que esse comportamento está funcionando.
74 assert_eq!(rate(10, 0), 0);
75 }
76}