| // 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 == nil /* ERROR "mismatched types" */ |
| _ = a == nil /* ERROR "mismatched types" */ |
| _ = l == nil |
| _ = s == nil /* ERROR "mismatched types" */ |
| _ = 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 == nil /* ERROR "mismatched types" */ |
| _ = a == nil /* ERROR "mismatched types" */ |
| _ = l == nil |
| _ = s == nil /* ERROR "mismatched types" */ |
| _ = p == nil |
| _ = f == nil |
| _ = i == nil /* ERROR "mismatched types" */ |
| _ = j == nil /* ERROR "mismatched types" */ |
| _ = 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 |
| } |