Skip to content

Commit c5f1bbe

Browse files
authored
fix: props are not of type Comparable (#149)
1 parent cf498ac commit c5f1bbe

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

lib/src/equatable_utils.dart

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import 'dart:collection';
2-
31
import 'package:collection/collection.dart';
42
import 'package:equatable/equatable.dart';
53

@@ -48,10 +46,8 @@ int _combine(int hash, dynamic object) {
4846
});
4947
return hash;
5048
}
51-
if (object is Set && object is! SplayTreeSet) {
52-
// this is needed to have a consistent iteration order so that the produced
53-
// hash is consistent independently of the Set insertion order
54-
object = SplayTreeSet<dynamic>.from(object);
49+
if (object is Set) {
50+
object = object.sorted(((dynamic a, dynamic b) => a.hashCode - b.hashCode));
5551
}
5652
if (object is Iterable) {
5753
for (final value in object) {

test/equatable_test.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,6 +1000,17 @@ void main() {
10001000
expect(instanceA != instanceB, true);
10011001
expect(instanceA.hashCode != instanceB.hashCode, true);
10021002
});
1003+
1004+
test('should support non-comparable types', () {
1005+
final instanceA = SimpleEquatable<Set<Object>>(
1006+
Set.from(<Object>[Object()]),
1007+
);
1008+
final instanceB = SimpleEquatable<Set<Object>>(
1009+
Set.from(<Object>[Object()]),
1010+
);
1011+
expect(instanceA == instanceB, false);
1012+
expect(instanceA.hashCode == instanceB.hashCode, false);
1013+
});
10031014
});
10041015
});
10051016

0 commit comments

Comments
 (0)