title: Testing equivalence of maps in Go with the same contents, but the test failed
body: <p>Here is a word-count function in Go</p>
  
  <pre><code>package wc
  
  import (
      "regexp"
      "strings"
  )
  
  type Histogram map[string]int
  
  func WordCount(input string) Histogram {
      histogram := make(map[string]int)
      re := regexp.MustCompile("[^a-zA-Z0-9 ]*")
      input = re.ReplaceAllString(input, "")
  
      for _, word := range strings.Split(input, " ") {
          if word == "" {
              continue
          }
          histogram[strings.ToLower(word)]++
      }
  
      return histogram
  }
  </code></pre>
  
  <p>This code passes or fails the tests non-deterministically. Sometimes it failed due to not matching the expected map and the actual map. However, the contents of both are exactly the same. I think that there is some problem with map comparison. I don't know how can I fix it. Somebody help me please!</p>
  
  <p>Here is the test-suite code</p>
  
  <pre><code>package wc
  
  import (
      "fmt"
      "testing"
  )
  
  var testCases = []struct {
      description string
      input       string
      output      Histogram
  }{
      {
          description: "a single word",
          input:       "word",
          output:      Histogram{"word": 1},
      },
      {
          description: "one of each",
          input:       "one of each",
          output:      Histogram{"one": 1, "of": 1, "each": 1},
      },
      {
          description: "multiple occurrences",
          input:       "one fish two fish red fish blue fish",
          output:      Histogram{"one": 1, "fish": 4, "two": 1, "red": 1, "blue": 1},
      },
      {
          description: "ignore punctuation",
          input:       "car : carpet as java : javascript!!&amp;@$%^&amp;",
          output:      Histogram{"car": 1, "carpet": 1, "as": 1, "java": 1, "javascript": 1},
      },
      {
          description: "including numbers",
          input:       "testing, 1, 2 testing",
          output:      Histogram{"testing": 2, "1": 1, "2": 1},
      },
      {
          description: "normalises case",
          input:       "go Go GO",
          output:      Histogram{"go": 3},
      },
  }
  
  func TestWordCount(t *testing.T) {
      for _, tt := range testCases {
          expected := fmt.Sprintf("%v", tt.output)
          actual := fmt.Sprintf("%v", WordCount(tt.input))
  
          if expected != actual {
              t.Fatalf("%s\n\tExpected: %v\n\tGot: %v", tt.description, expected, actual)
          } else {
              t.Logf("PASS: %s - WordCount(%s)", tt.description, tt.input)
          }
      }
  }
  </code></pre>
  
  <p>Below are examples of the failure situation:</p>
  
  <pre><code>1.
  Expected: map[two:1 red:1 blue:1 one:1 fish:4]
  Got: map[one:1 fish:4 two:1 red:1 blue:1]
  2.
  Expected: map[one:1 fish:4 two:1 red:1 blue:1]
  Got: map[red:1 blue:1 one:1 fish:4 two:1]
  3.
  Expected: map[java:1 javascript:1 car:1 carpet:1 as:1]
  Got: map[javascript:1 car:1 carpet:1 as:1 java:1]
  ...
  </code></pre>
  
  <p><strike>Additional information are here:
  <a href="http://exercism.io/submissions/cf94f4732fd97335be2e755f" rel="nofollow">http://exercism.io/submissions/cf94f4732fd97335be2e755f</a></strike></p>