| // Copyright 2022 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. |
| |
| package comparisons |
| |
| type ( |
| B int // basic type representative |
| A [10]func() |
| L []byte |
| S struct{ f []byte } |
| P *S |
| F func() |
| I interface{} |
| M map[string]int |
| C chan int |
| ) |
| |
| var ( |
| b B |
| a A |
| l L |
| s S |
| p P |
| f F |
| i I |
| m M |
| c C |
| ) |
| |
| func _() { |
| _ = nil == nil // ERROR operator == not defined on untyped nil |
| _ = b == b |
| _ = a /* ERROR \[10\]func\(\) cannot be compared */ == a |
| _ = l /* ERROR slice can only be compared to nil */ == l |
| _ = s /* ERROR struct containing \[\]byte cannot be compared */ == s |
| _ = p == p |
| _ = f /* ERROR func can only be compared to nil */ == f |
| _ = i == i |
| _ = m /* ERROR map can only be compared to nil */ == m |
| _ = c == c |
| |
| _ = b /* ERROR mismatched types */ == nil |
| _ = a /* ERROR mismatched types */ == nil |
| _ = l == nil |
| _ = s /* ERROR mismatched types */ == nil |
| _ = p == nil |
| _ = f == nil |
| _ = i == nil |
| _ = m == nil |
| _ = c == nil |
| |
| _ = nil /* ERROR operator < not defined on untyped nil */ < nil |
| _ = b < b |
| _ = a /* ERROR operator < not defined on array */ < a |
| _ = l /* ERROR operator < not defined on slice */ < l |
| _ = s /* ERROR operator < not defined on struct */ < s |
| _ = p /* ERROR operator < not defined on pointer */ < p |
| _ = f /* ERROR operator < not defined on func */ < f |
| _ = i /* ERROR operator < not defined on interface */ < i |
| _ = m /* ERROR operator < not defined on map */ < m |
| _ = c /* ERROR operator < not defined on chan */ < c |
| } |
| |
| func _[ |
| B int, |
| A [10]func(), |
| L []byte, |
| S struct{ f []byte }, |
| P *S, |
| F func(), |
| I interface{}, |
| J comparable, |
| M map[string]int, |
| C chan int, |
| ]( |
| b B, |
| a A, |
| l L, |
| s S, |
| p P, |
| f F, |
| i I, |
| j J, |
| m M, |
| c C, |
| ) { |
| _ = b == b |
| _ = a /* ERROR incomparable types in type set */ == a |
| _ = l /* ERROR incomparable types in type set */ == l |
| _ = s /* ERROR incomparable types in type set */ == s |
| _ = p == p |
| _ = f /* ERROR incomparable types in type set */ == f |
| _ = i /* ERROR incomparable types in type set */ == i |
| _ = j == j |
| _ = m /* ERROR incomparable types in type set */ == m |
| _ = c == c |
| |
| _ = b /* ERROR mismatched types */ == nil |
| _ = a /* ERROR mismatched types */ == nil |
| _ = l == nil |
| _ = s /* ERROR mismatched types */ == nil |
| _ = p == nil |
| _ = f == nil |
| _ = i /* ERROR mismatched types */ == nil |
| _ = j /* ERROR mismatched types */ == nil |
| _ = m == nil |
| _ = c == nil |
| |
| _ = b < b |
| _ = a /* ERROR type parameter A is not comparable with < */ < a |
| _ = l /* ERROR type parameter L is not comparable with < */ < l |
| _ = s /* ERROR type parameter S is not comparable with < */ < s |
| _ = p /* ERROR type parameter P is not comparable with < */ < p |
| _ = f /* ERROR type parameter F is not comparable with < */ < f |
| _ = i /* ERROR type parameter I is not comparable with < */ < i |
| _ = j /* ERROR type parameter J is not comparable with < */ < j |
| _ = m /* ERROR type parameter M is not comparable with < */ < m |
| _ = c /* ERROR type parameter C is not comparable with < */ < c |
| } |