Solution: statistics



examples/test-statistics/stats.go
package main

import "fmt"

func main() {
    numbers := []int{2, 3, 5, -1, 1, 8}
    fmt.Println(numbers)
    if len(numbers) == 0 {
        fmt.Println("We cannot provide stats on empty set of numbers")
        return
    }

    min, max, total, average := stats(numbers)

    //fmt.Println(min(numbers))
    fmt.Printf("Total: %v\n", total)
    fmt.Printf("Average: %v\n", average)
    fmt.Printf("Min: %v\n", min)
    fmt.Printf("Max: %v\n", max)
}

func stats(numbers []int) (int, int, int, float32) {
    total := 0
    min := numbers[0]
    max := numbers[0]
    for _, num := range numbers {
        if num < min {
            min = num
        }
        if num > max {
            max = num
        }
        total += num
    }
    average := float32(total) / float32(len(numbers))

    return min, max, total, average
}

examples/test-statistics/stats_test.go
package main

import "testing"

func TestStats(t *testing.T) {
    numbers := []int{2, 3, 5, -1, 1, 8}
    min, max, total, average := stats(numbers)
    if min != -1 {
        t.Errorf("min is expected to be -1 actual: %v", min)
    }
    if max != 8 {
        t.Errorf("max is expected to be 8 actual: %v", max)
    }
    if total != 18 {
        t.Errorf("total is expected to be 18 actual: %v", total)
    }
    if average != 3 {
        t.Errorf("average is expected to be 3 actual: %v", average)
    }
}