Initial commit.
This commit is contained in:
commit
1f85b0ddc3
13 changed files with 237 additions and 0 deletions
19
collections/sum.go
Normal file
19
collections/sum.go
Normal file
|
@ -0,0 +1,19 @@
|
|||
package collections
|
||||
|
||||
func Sum(numbers []int) int {
|
||||
sum := 0
|
||||
for _, number := range numbers {
|
||||
sum += number
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
func SumAll(numberSlices ...[]int) []int {
|
||||
var sums []int
|
||||
for _, numbers := range numberSlices {
|
||||
sums = append(sums, Sum(numbers))
|
||||
}
|
||||
|
||||
return sums
|
||||
}
|
26
collections/sum_test.go
Normal file
26
collections/sum_test.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
package collections
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSum(t *testing.T) {
|
||||
numbers := []int{1, 2, 3, 4, 5}
|
||||
|
||||
got := Sum(numbers)
|
||||
want := 15
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %d want %d given %v", got, want, numbers)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumAll(t *testing.T) {
|
||||
got := SumAll([]int{1, 2}, []int{1, 2, 3, 4, 5})
|
||||
want := []int{3, 15}
|
||||
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("got %d want %d", got, want)
|
||||
}
|
||||
}
|
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
|||
module learn-go-with-tests
|
||||
|
||||
go 1.22.7
|
25
hello-world/hello.go
Normal file
25
hello-world/hello.go
Normal file
|
@ -0,0 +1,25 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
const spanish = "Spanish"
|
||||
const spanishHelloPrefix = "Hola, "
|
||||
const englishHelloPrefix = "Hello, "
|
||||
|
||||
func Hello(name, language string) string {
|
||||
if name == "" {
|
||||
name = "world"
|
||||
}
|
||||
|
||||
prefix := englishHelloPrefix
|
||||
switch language {
|
||||
case spanish:
|
||||
prefix = spanishHelloPrefix
|
||||
}
|
||||
|
||||
return prefix + name
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(Hello("World", ""))
|
||||
}
|
32
hello-world/hello_test.go
Normal file
32
hello-world/hello_test.go
Normal file
|
@ -0,0 +1,32 @@
|
|||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestHello(t *testing.T) {
|
||||
t.Run("say hello to given name", func(t *testing.T) {
|
||||
got := Hello("Judas", "")
|
||||
want := "Hello, Judas"
|
||||
|
||||
assertCorrectMessage(t, got, want)
|
||||
})
|
||||
t.Run("hello world on empty string", func(t *testing.T) {
|
||||
got := Hello("", "")
|
||||
want := "Hello, world"
|
||||
|
||||
assertCorrectMessage(t, got, want)
|
||||
})
|
||||
t.Run("spanish", func(t *testing.T) {
|
||||
got := Hello("Marjorie", "Spanish")
|
||||
want := "Hola, Marjorie"
|
||||
|
||||
assertCorrectMessage(t, got, want)
|
||||
})
|
||||
}
|
||||
|
||||
func assertCorrectMessage(t testing.TB, got, want string) {
|
||||
t.Helper()
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %q want %q", got, want)
|
||||
}
|
||||
}
|
6
integers/adder.go
Normal file
6
integers/adder.go
Normal file
|
@ -0,0 +1,6 @@
|
|||
package integers
|
||||
|
||||
// Returns the sum of two integers.
|
||||
func Add(x, y int) int {
|
||||
return x + y
|
||||
}
|
21
integers/adder_test.go
Normal file
21
integers/adder_test.go
Normal file
|
@ -0,0 +1,21 @@
|
|||
package integers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAdder(t *testing.T) {
|
||||
sum := Add(2, 2)
|
||||
expected := 4
|
||||
|
||||
if sum != expected {
|
||||
t.Errorf("expected %d got %d", expected, sum)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleAdd() {
|
||||
sum := Add(1, 5)
|
||||
fmt.Println(sum)
|
||||
// Output: 6
|
||||
}
|
27
iteration/repeat_test.go
Normal file
27
iteration/repeat_test.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package iteration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRepeat(t *testing.T) {
|
||||
repeated := Repeat("a", 3)
|
||||
expected := "aaa"
|
||||
|
||||
if repeated != expected {
|
||||
t.Errorf("expected %q got %q", expected, repeated)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkRepeat(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
Repeat("a", 5)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleRepeat() {
|
||||
res := Repeat("a", 5)
|
||||
fmt.Println(res)
|
||||
// Output: aaaaa
|
||||
}
|
10
iteration/repeater.go
Normal file
10
iteration/repeater.go
Normal file
|
@ -0,0 +1,10 @@
|
|||
package iteration
|
||||
|
||||
func Repeat(char string, n int) string {
|
||||
var repeated string
|
||||
for i := 0; i < n; i++ {
|
||||
repeated += char
|
||||
}
|
||||
|
||||
return repeated
|
||||
}
|
22
pointererror/pointererror.go
Normal file
22
pointererror/pointererror.go
Normal file
|
@ -0,0 +1,22 @@
|
|||
package pointererror
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Bitcoin int
|
||||
|
||||
func (b Bitcoin) String() string {
|
||||
return fmt.Sprintf("%d BTC", b)
|
||||
}
|
||||
|
||||
type Wallet struct {
|
||||
balance Bitcoin
|
||||
}
|
||||
|
||||
func (w *Wallet) Deposit(amount Bitcoin) {
|
||||
w.balance += amount * 2
|
||||
}
|
||||
|
||||
func (w *Wallet) Balance() Bitcoin {
|
||||
fmt.Printf("address of balance in Balance is %p \n", &w.balance)
|
||||
return w.balance
|
||||
}
|
22
pointererror/pointererror_test.go
Normal file
22
pointererror/pointererror_test.go
Normal file
|
@ -0,0 +1,22 @@
|
|||
package pointererror
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestWallet(t *testing.T) {
|
||||
wallet := Wallet{}
|
||||
|
||||
wallet.Deposit(Bitcoin(10))
|
||||
|
||||
got := wallet.Balance()
|
||||
|
||||
fmt.Printf("address of balance in test is %p \n", &wallet.balance)
|
||||
|
||||
want := Bitcoin(10)
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %s want %s", got, want)
|
||||
}
|
||||
}
|
10
shapes/shapes.go
Normal file
10
shapes/shapes.go
Normal file
|
@ -0,0 +1,10 @@
|
|||
package shapes
|
||||
|
||||
type Rectangle struct {
|
||||
Width float64
|
||||
Height float64
|
||||
}
|
||||
|
||||
func Perimeter(rec Rectangle) float64 {
|
||||
return 2 * (rec.Width + rec.Height)
|
||||
}
|
14
shapes/shapes_test.go
Normal file
14
shapes/shapes_test.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
package shapes
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestPerimeter(t *testing.T) {
|
||||
rectangle := Rectangle{10.00, 10.00}
|
||||
|
||||
got := Perimeter(rectangle)
|
||||
want := 40.0
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %.2f want %.2f", got, want)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue