// errorcheck

// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Verify that switch statements with duplicate cases are detected by the compiler.
// Does not compile.

package main

func f0(x int) {
	switch x {
	case 0:
	case 0: // ERROR "duplicate case 0 in switch"
	}

	switch x {
	case 0:
	case int(0): // ERROR "duplicate case int.0. .value 0. in switch"
	}
}

func f1(x float32) {
	switch x {
	case 5:
	case 5: // ERROR "duplicate case 5 .value 5\.0. in switch"
	case 5.0: // ERROR "duplicate case 5 .value 5\.0. in switch"
	}
}

func f2(s string) {
	switch s {
	case "":
	case "": // ERROR "duplicate case .. in switch"
	case "abc":
	case "abc": // ERROR "duplicate case .abc. in switch"
	}
}

func f3(e interface{}) {
	switch e {
	case 0:
	case 0: // ERROR "duplicate case 0 in switch"
	case int64(0):
	case float32(10):
	case float32(10): // ERROR "duplicate case float32\(10\) .value 10\.0. in switch"
	case float64(10):
	case float64(10): // ERROR "duplicate case float64\(10\) .value 10\.0. in switch"
	}
}

func f5(a [1]int) {
	switch a {
	case [1]int{0}:
	case [1]int{0}: // OK -- see issue 15896
	}
}

// Ensure duplicate const bool clauses are accepted.
func f6() int {
	switch {
	case 0 == 0:
		return 0
	case 1 == 1: // Intentionally OK, even though a duplicate of the above const true
		return 1
	}
	return 2
}

// Ensure duplicates in ranges are detected (issue #17517).
func f7(a int) {
	switch a {
	case 0:
	case 0, 1: // ERROR "duplicate case 0"
	case 1, 2, 3, 4: // ERROR "duplicate case 1"
	}
}

// Ensure duplicates with simple literals are printed as they were
// written, not just their values. Particularly useful for runes.
func f8(r rune) {
	const x = 10
	switch r {
	case 33, 33: // ERROR "duplicate case 33 in switch"
	case 34, '"': // ERROR "duplicate case '"' .value 34. in switch"
	case 35, rune('#'): // ERROR "duplicate case rune.'#'. .value 35. in switch"
	case 36, rune(36): // ERROR "duplicate case rune.36. .value 36. in switch"
	case 37, '$'+1: // ERROR "duplicate case '\$' \+ 1 .value 37. in switch"
	case 'b':
	case 'a', 'b', 'c', 'd': // ERROR "duplicate case 'b' .value 98."
	case x, x: // ERROR "duplicate case x .value 10."
	}
}
