1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| package calculator
import ( "math" "testing" )
func TestAdd_TableDriven(t *testing.T) { tests := []struct { name string a, b float64 expected float64 }{ {"positive numbers", 2, 3, 5}, {"negative numbers", -2, -3, -5}, {"mixed signs", -2, 3, 1}, {"zeros", 0, 0, 0}, {"large numbers", 1e18, 1e18, 2e18}, {"decimals", 0.1, 0.2, 0.3}, }
for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := Add(tt.a, tt.b) if math.Abs(result-tt.expected) > 1e-9 { t.Errorf("Add(%f, %f) = %f, want %f", tt.a, tt.b, result, tt.expected) } }) } }
func TestDivide_TableDriven(t *testing.T) { tests := []struct { name string a, b float64 expected float64 expectErr error }{ {"normal division", 10, 2, 5, nil}, {"division by zero", 10, 0, 0, ErrDivisionByZero}, {"negative result", -10, 2, -5, nil}, {"fractional result", 1, 3, 0.333333, nil}, {"divide zero", 0, 5, 0, nil}, }
for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := Divide(tt.a, tt.b)
if tt.expectErr != nil { if err != tt.expectErr { t.Errorf("expected error %v, got %v", tt.expectErr, err) } return }
if err != nil { t.Fatalf("unexpected error: %v", err) }
if math.Abs(result-tt.expected) > 1e-4 { t.Errorf("Divide(%f, %f) = %f, want %f", tt.a, tt.b, result, tt.expected) } }) } }
func TestSqrt_TableDriven(t *testing.T) { tests := []struct { name string input float64 expected float64 expectErr error }{ {"positive number", 16, 4, nil}, {"zero", 0, 0, nil}, {"negative number", -1, 0, ErrNegativeSqrt}, {"non-perfect square", 2, math.Sqrt2, nil}, }
for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := Sqrt(tt.input) if tt.expectErr != nil { if err != tt.expectErr { t.Errorf("expected error %v, got %v", tt.expectErr, err) } return } if err != nil { t.Fatalf("unexpected error: %v", err) } if math.Abs(result-tt.expected) > 1e-9 { t.Errorf("Sqrt(%f) = %f, want %f", tt.input, result, tt.expected) } }) } }
|