package main
import (
"fmt"
"testing"
)
func TestShouldReduceExpression(t *testing.T) {
tests := []string{
"1+2*3+4*5+6",
"2*3+(4*5)",
"1+(2*3)+(4*(5+6))",
"(2*3)+(4*5)",
"5+(8*3+9+3*4*3)",
"5*9*(7*3*3+9*3+(8+6*4))",
"((2+4*9)*(6+9*8+6)+6)+2+4*2",
}
expected := []int{
71,
26,
51,
26,
437,
12240,
13632,
}
for i, test := range tests {
result := reduce(prepareInput(test, false), true)
fmt.Printf("[[%s => %d]]\n", test, result)
fmt.Println()
if result != expected[i] {
t.Errorf("%d: got %d, expected %d", i, result, expected[i])
}
}
}
func TestShouldReduceExpression2(t *testing.T) {
tests := []string{
"1+2*3+4*5+6",
"2*3+(4+5)",
"2*3+(4*5)",
"(2*3)+(4*5)",
"(2*3)*(4*5)",
"1+(2+1)",
"1+(2*3)+(4*(5+6))",
"2*3+(4*5)",
"5+(8*3+9+3*4*3)",
"5*9*(7*3*3+9*3+(8+6*4))",
"((2+4*9)*(6+9*8+6)+6)+2+4*2",
}
expected := []int{
231,
24,
46,
26,
120,
4,
51,
46,
1445,
669060,
23340,
}
for i, test := range tests {
tst := prepareInput(test, true)
in := make([]int, len(tst))
for i, j := range tst {
in[i] = int(j)
}
result := reduce2(in, true)
fmt.Printf("[[%s => %d]]\n", test, result)
fmt.Println()
if result != expected[i] {
t.Errorf("%d: got %d, expected %d", i, result, expected[i])
}
}
}