Back to home

Go Fizzbuzz

Published: Sep 22, 2018

Last updated: Sep 22, 2018

    A basic implementation of the infamous Fizz Buzz with unit testing.

    Setting up the test

    Set up fizz_buzz_test.go with the following file:

    package fizzbuzz import "testing" func TestReturnString(t *testing.T) { expected := "2" if observed := FizzBuzz(2); observed != expected { t.Fatalf("FizzBuzz(2)) = %v, want %v", observed, expected) } } func TestFizz(t *testing.T) { expected := "Fizz" if observed := FizzBuzz(3); observed != expected { t.Fatalf("FizzBuzz(3)) = %v, want %v", observed, expected) } } func TestBuzz(t *testing.T) { expected := "Buzz" if observed := FizzBuzz(5); observed != expected { t.Fatalf("FizzBuzz(5)) = %v, want %v", observed, expected) } } func TestFizzBuzz(t *testing.T) { expected := "FizzBuzz" if observed := FizzBuzz(15); observed != expected { t.Fatalf("FizzBuzz(15)) = %v, want %v", observed, expected) } } // BenchmarkFizzBuzz() is a benchmarking function. These functions follow the // form `func BenchmarkXxx(*testing.B)` and can be used to test the performance // of your implementation. They may not be present in every exercise, but when // they are you can run them by including the `-bench` flag with the `go test` // command, like so: `go test -v --bench . --benchmem` // // You will see output similar to the following: // // BenchmarkFizzBuzz 2000000000 0.46 ns/op // // This means that the loop ran 2000000000 times at a speed of 0.46 ns per loop. // // While benchmarking can be useful to compare different iterations of the same // exercise, keep in mind that others will run the same benchmarks on different // machines, with different specs, so the results from these benchmark tests may // vary. func BenchmarkFizzBuzz(b *testing.B) { for i := 0; i < b.N; i++ { FizzBuzz(15) } }

    Fizz Buzz implementation

    We will use the interger-to-ASCII function itoa from the strings library.

    package fizzbuzz import "strconv" // FizzBuzz should have a comment documenting it. func FizzBuzz(i int) string { switch true { case i%15 == 0: return "FizzBuzz" case i%3 == 0: return "Fizz" case i%5 == 0: return "Buzz" default: return strconv.Itoa(i) } }

    Running Tests

    In the directory, run go test.

    Personal image

    Dennis O'Keeffe

    • Melbourne, Australia

    Hi, I am a professional Software Engineer. Formerly of Culture Amp, UsabilityHub, Present Company and NightGuru.
    I am currently working on Visibuild.


    Get fresh posts + news direct to your inbox.

    No spam. We only send you relevant content.

    Go Fizzbuzz


    Share this post