Skip to content

Commit 2c64c6f

Browse files
committed
Add HashSet test case
1 parent de1c0d4 commit 2c64c6f

3 files changed

Lines changed: 65 additions & 9 deletions

File tree

Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/EquatableClass.swift renamed to Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/HashableClass.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,22 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15-
public class EquatableClass: Equatable {
15+
public class HashableClass: Hashable {
1616
public let value: Int
1717
public init(value: Int) {
1818
self.value = value
1919
}
2020

21-
public static func == (lhs: EquatableClass, rhs: EquatableClass) -> Bool {
21+
public static func == (lhs: HashableClass, rhs: HashableClass) -> Bool {
2222
lhs.value == rhs.value
2323
}
24+
25+
public func hash(into hasher: inout Hasher) {
26+
hasher.combine(value)
27+
}
2428
}
2529

26-
public class EquatableSubclass: EquatableClass {
30+
public class HashableSubclass: HashableClass {
2731
public override init(value: Int) {
2832
super.init(value: value)
2933
}

Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/EquatableTest.java renamed to Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/HashableTest.java

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919

2020
import static org.junit.jupiter.api.Assertions.*;
2121

22+
import java.util.HashSet;
23+
import java.util.List;
24+
2225
@SuppressWarnings({"AssertBetweenInconvertibleTypes", "EqualsWithItself"})
23-
public class EquatableTest {
26+
public class HashableTest {
2427
@Test
25-
void genericStructType() {
28+
void valueTypeEquals() {
2629
try (var arena = SwiftArena.ofConfined()) {
2730
var a = MyIDs.makeIntID(42, arena);
2831
var b = MyIDs.makeIntID(42, arena);
@@ -37,16 +40,50 @@ void genericStructType() {
3740
}
3841

3942
@Test
40-
void classType() {
43+
void referenceTypeEquals() {
4144
try (var arena = SwiftArena.ofConfined()) {
42-
var a = EquatableClass.init(42, arena);
43-
var b = EquatableSubclass.init(42, arena);
44-
var c = EquatableSubclass.init(0, arena);
45+
var a = HashableClass.init(42, arena);
46+
var b = HashableSubclass.init(42, arena);
47+
var c = HashableSubclass.init(0, arena);
4548
assertEquals(a, b);
4649
assertEquals(b, a);
4750
assertEquals(b, b);
4851
assertNotEquals(a, c);
4952
assertNotEquals(b, c);
5053
}
5154
}
55+
56+
@Test
57+
void hashSetValueType() {
58+
try (var arena = SwiftArena.ofConfined()) {
59+
var a = MyIDs.makeIntID(42, arena);
60+
var b = MyIDs.makeIntID(42, arena);
61+
var c = MyIDs.makeIntID(0, arena);
62+
var set = new HashSet<>(List.of(
63+
a, b
64+
));
65+
assertTrue(set.contains(a));
66+
assertTrue(set.contains(b));
67+
assertFalse(set.contains(c));
68+
assertEquals(1, set.size());
69+
}
70+
}
71+
72+
@Test
73+
void hashSetReferenceType() {
74+
try (var arena = SwiftArena.ofConfined()) {
75+
var a = HashableClass.init(42, arena);
76+
var b = HashableClass.init(42, arena);
77+
var c = HashableSubclass.init(42, arena);
78+
var d = HashableSubclass.init(0, arena);
79+
var set = new HashSet<>(List.of(
80+
a, b, c
81+
));
82+
assertTrue(set.contains(a));
83+
assertTrue(set.contains(b));
84+
assertTrue(set.contains(c));
85+
assertFalse(set.contains(d));
86+
assertEquals(1, set.size());
87+
}
88+
}
5289
}

Sources/SwiftJava/SwiftObjects.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,18 @@ extension SwiftObjects {
156156
return perform(as: typeMetadata)
157157
}
158158
}
159+
160+
public class HashableClass: Hashable {
161+
public let value: Int
162+
public init(value: Int) {
163+
self.value = value
164+
}
165+
166+
public static func == (lhs: HashableClass, rhs: HashableClass) -> Bool {
167+
lhs.value == rhs.value
168+
}
169+
170+
public func hash(into hasher: inout Hasher) {
171+
hasher.combine(value)
172+
}
173+
}

0 commit comments

Comments
 (0)