Add fundamentals
This commit is contained in:
commit
64f5d8346d
16
ftl-fundamentals/calculator/calculator.go
Normal file
16
ftl-fundamentals/calculator/calculator.go
Normal file
@ -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
|
||||
}
|
140
ftl-fundamentals/calculator/calculator_test.go
Normal file
140
ftl-fundamentals/calculator/calculator_test.go
Normal file
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
3
ftl-fundamentals/go.mod
Normal file
3
ftl-fundamentals/go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module ftl-fundamentals
|
||||
|
||||
go 1.17
|
Loading…
Reference in New Issue
Block a user