Add structs package
This commit is contained in:
parent
a6a921cedc
commit
080f31017d
37
structs/shapes.go
Normal file
37
structs/shapes.go
Normal file
@ -0,0 +1,37 @@
|
||||
package structs
|
||||
|
||||
import "math"
|
||||
|
||||
type Shape interface {
|
||||
Area() float64
|
||||
}
|
||||
|
||||
type Rectangle struct {
|
||||
Width float64
|
||||
Height float64
|
||||
}
|
||||
|
||||
type Circle struct {
|
||||
Radius float64
|
||||
}
|
||||
|
||||
type Triangle struct {
|
||||
Base float64
|
||||
Height float64
|
||||
}
|
||||
|
||||
func Perimiter(r Rectangle) float64 {
|
||||
return 2 * (r.Width + r.Height)
|
||||
}
|
||||
|
||||
func (c Circle) Area() float64 {
|
||||
return math.Pi * c.Radius * c.Radius
|
||||
}
|
||||
|
||||
func (r Rectangle) Area() float64 {
|
||||
return r.Width * r.Height
|
||||
}
|
||||
|
||||
func (t Triangle) Area() float64 {
|
||||
return t.Base * t.Height / 2
|
||||
}
|
38
structs/shapes_test.go
Normal file
38
structs/shapes_test.go
Normal file
@ -0,0 +1,38 @@
|
||||
package structs
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestPerimiter(t *testing.T) {
|
||||
rectangle := Rectangle{10.0, 10.0}
|
||||
got := Perimiter(rectangle)
|
||||
want := 40.0
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %.2f want %.2f", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestArea(t *testing.T) {
|
||||
|
||||
areaTests := []struct {
|
||||
name string
|
||||
shape Shape
|
||||
hasArea float64
|
||||
}{
|
||||
{name: "Rectangle", shape: Rectangle{Width: 12, Height: 6}, hasArea: 72.0},
|
||||
{name: "Circle", shape: Circle{Radius: 10}, hasArea: 314.1592653589793},
|
||||
{name: "Triangle", shape: Triangle{Base: 12, Height: 6}, hasArea: 36.0},
|
||||
}
|
||||
|
||||
for _, tt := range areaTests {
|
||||
// using tt.name from the case to use it as the `t.Run` test name
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := tt.shape.Area()
|
||||
if got != tt.hasArea {
|
||||
t.Errorf("%#v got %g want %g", tt.shape, got, tt.hasArea)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user