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