2
1
Fork 0
pr3-ws202526/go/04-design-pattern/patterns/composite_test.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)
}
}