commit 64f5d8346dd63928e3867e36721ae449ad2a385e Author: kjuulh Date: Wed Feb 23 00:07:11 2022 +0100 Add fundamentals diff --git a/ftl-fundamentals/calculator/calculator.go b/ftl-fundamentals/calculator/calculator.go new file mode 100644 index 0000000..1095b97 --- /dev/null +++ b/ftl-fundamentals/calculator/calculator.go @@ -0,0 +1,16 @@ +package calculator + +// Add takes two numbers and returns the result of adding them together. +func Add(a, b float64) float64 { + return a + b +} + +// Subtract takes two numbers and returns the result of subtracting the second +// from the first. +func Subtract(a, b float64) float64 { + return b - a +} + +func Multiply(a, b float64) float64 { + return a * b +} diff --git a/ftl-fundamentals/calculator/calculator_test.go b/ftl-fundamentals/calculator/calculator_test.go new file mode 100644 index 0000000..d911e36 --- /dev/null +++ b/ftl-fundamentals/calculator/calculator_test.go @@ -0,0 +1,140 @@ +package calculator + +import ( + "fmt" + "testing" +) + +type testData struct { + want float64 + a float64 + b float64 +} + +func TestAdd(t *testing.T) { + t.Parallel() + + td := []testData{ + testData{ + want: 4, + a: 2, + b: 2, + }, + testData{ + want: 2, + a: 1, + b: 1, + }, + testData{ + want: 3, + a: 1, + b: 2, + }, + testData{ + want: 0, + a: -1, + b: 1, + }, + testData{ + want: -1.5, + a: -1, + b: -.5, + }, + } + for _, data := range td { + t.Run(fmt.Sprintf("(a:%f,b:%f)->want:%f", data.a, data.b, data.want), func(t *testing.T) { + got := Add(data.a, data.b) + if data.want != got { + t.Errorf("want %f, got %f", data.want, got) + } + }) + } +} + +func TestSubtract(t *testing.T) { + t.Parallel() + td := []testData{ + { + want: -2, + a: 4, + b: 2, + }, + { + want: 2, + a: 2, + b: 4, + }, + { + want: 0, + a: 4, + b: 4, + }, + { + want: 1.5, + a: 1, + b: 2.5, + }, + { + want: -1.5, + a: -1, + b: -2.5, + }, + } + for _, data := range td { + t.Run(fmt.Sprintf("(a:%f,b:%f)->want:%f", data.a, data.b, data.want), func(t *testing.T) { + got := Subtract(data.a, data.b) + if data.want != got { + t.Errorf("want %f, got %f", data.want, got) + } + }) + } +} + +func TestMultiply(t *testing.T) { + t.Parallel() + + want := 8. + got := Multiply(2, 4) + if want != got { + t.Errorf("want %f, got %f", want, got) + } +} + +func TestMultiplyOverflows(t *testing.T) { + t.Parallel() + td := []testData{ + { + want: 2, + a: 1, + b: 2, + }, + { + want: 8, + a: 2, + b: 4, + }, + { + want: -8, + a: -2, + b: 4, + }, + { + want: 1.5, + a: 0.5, + b: 3, + }, + { + want: 0, + a: 8, + b: 0, + }, + } + for _, data := range td { + t.Run(fmt.Sprintf("(a:%f,b:%f)->want:%f", data.a, data.b, data.want), func(t *testing.T) { + got := Multiply(data.a, data.b) + if data.want != got { + t.Errorf("want %f, got %f", data.want, got) + } + }) + } +} diff --git a/ftl-fundamentals/go.mod b/ftl-fundamentals/go.mod new file mode 100644 index 0000000..33bccb4 --- /dev/null +++ b/ftl-fundamentals/go.mod @@ -0,0 +1,3 @@ +module ftl-fundamentals + +go 1.17