forked from steger/pr3-ws202526
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package patterns_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gitty.informatik.hs-mannheim.de/steger/pr3-code/go/04-design-pattern/patterns"
|
|
)
|
|
|
|
type valueCalc float64
|
|
|
|
func (v valueCalc) Calc() float64 {
|
|
return float64(v)
|
|
}
|
|
|
|
func TestCompositeCalculator_Empty(t *testing.T) {
|
|
empty := patterns.NewCompositeCalculator(5.0, func(a, b float64) float64 { return a + b })
|
|
got := empty.Calc()
|
|
want := 5.0
|
|
if got != want {
|
|
t.Errorf("Empty: got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCompositeCalculator_Addition(t *testing.T) {
|
|
add := patterns.NewCompositeCalculatorFromOperator("+")
|
|
add.Add(valueCalc(5))
|
|
add.Add(valueCalc(3))
|
|
add.Add(valueCalc(2))
|
|
got := add.Calc()
|
|
want := 10.0
|
|
if got != want {
|
|
t.Errorf("Addition: got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCompositeCalculator_Multiplication(t *testing.T) {
|
|
mul := patterns.NewCompositeCalculatorFromOperator("*")
|
|
mul.Add(valueCalc(2))
|
|
mul.Add(valueCalc(3))
|
|
mul.Add(valueCalc(4))
|
|
got := mul.Calc()
|
|
want := 24.0
|
|
if got != want {
|
|
t.Errorf("Multiplication: got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCompositeCalculator_Nested(t *testing.T) {
|
|
// + 5 3 2 * 2 3 + 4 4 = 5 + 3 + 2 + (2 * 3 * (4+4)) = 5+3+2+48 = 58
|
|
add := patterns.NewCompositeCalculatorFromOperator("+")
|
|
add.Add(valueCalc(5))
|
|
add.Add(valueCalc(3))
|
|
add.Add(valueCalc(2))
|
|
|
|
mul := patterns.NewCompositeCalculatorFromOperator("*")
|
|
mul.Add(valueCalc(2))
|
|
mul.Add(valueCalc(3))
|
|
|
|
add2 := patterns.NewCompositeCalculatorFromOperator("+")
|
|
add2.Add(valueCalc(4))
|
|
add2.Add(valueCalc(4))
|
|
|
|
mul.Add(add2)
|
|
add.Add(mul)
|
|
|
|
got := add.Calc()
|
|
want := 58.0
|
|
if got != want {
|
|
t.Errorf("Nested: got %v, want %v", got, want)
|
|
}
|
|
}
|