1// RUN: %check_clang_tidy %s objc-missing-hash %t
2
3typedef _Bool BOOL;
4#define YES 1
5#define NO 0
6typedef unsigned int NSUInteger;
7typedef void *id;
8
9@interface NSObject
10- (NSUInteger)hash;
11- (BOOL)isEqual:(id)object;
12@end
13
14@interface MissingHash : NSObject
15@end
16
17@implementation MissingHash
18// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: 'MissingHash' implements -isEqual: without implementing -hash [objc-missing-hash]
19
20- (BOOL)isEqual:(id)object {
21  return YES;
22}
23
24@end
25
26@interface HasHash : NSObject
27@end
28
29@implementation HasHash
30
31- (NSUInteger)hash {
32  return 0;
33}
34
35- (BOOL)isEqual:(id)object {
36  return YES;
37}
38
39@end
40
41@interface NSArray : NSObject
42@end
43
44@interface MayHaveInheritedHash : NSArray
45@end
46
47@implementation MayHaveInheritedHash
48
49- (BOOL)isEqual:(id)object {
50  return YES;
51}
52
53@end
54
55@interface AnotherRootClass
56@end
57
58@interface NotDerivedFromNSObject : AnotherRootClass
59@end
60
61@implementation NotDerivedFromNSObject
62
63- (BOOL)isEqual:(id)object {
64  return NO;
65}
66
67@end
68
69