From 75534701745b5eba5d4ec8eb4cd4872b8ddcc06a Mon Sep 17 00:00:00 2001 From: Loren Van Spronsen Date: Wed, 5 Oct 2022 13:28:59 -0700 Subject: [PATCH] Add `contains` methods to built multimaps. Both `ListMultimap` and `SetMultimap` from quiver support a `contains` operations which checks for the presence of a key/value pair. --- .../list_multimap/built_list_multimap.dart | 4 ++++ lib/src/set_multimap/built_set_multimap.dart | 4 ++++ .../built_list_multimap_test.dart | 24 +++++++++++++++++++ .../set_multimap/built_set_multimap_test.dart | 24 +++++++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/lib/src/list_multimap/built_list_multimap.dart b/lib/src/list_multimap/built_list_multimap.dart index 3092ed5..02eb579 100644 --- a/lib/src/list_multimap/built_list_multimap.dart +++ b/lib/src/list_multimap/built_list_multimap.dart @@ -118,6 +118,10 @@ abstract class BuiltListMultimap { /// As [ListMultimap.containsValue]. bool containsValue(Object? value) => values.contains(value); + /// As [ListMultimap.contains]. + bool contains(Object? key, Object? value) + => _map[key]?.contains(value) == true; + /// As [ListMultimap.forEach]. void forEach(void Function(K, V) f) { _map.forEach((key, values) { diff --git a/lib/src/set_multimap/built_set_multimap.dart b/lib/src/set_multimap/built_set_multimap.dart index 469f599..07d4dae 100644 --- a/lib/src/set_multimap/built_set_multimap.dart +++ b/lib/src/set_multimap/built_set_multimap.dart @@ -118,6 +118,10 @@ abstract class BuiltSetMultimap { /// As [SetMultimap.containsValue]. bool containsValue(Object? value) => values.contains(value); + /// As [SetMultimap.contains]. + bool contains(Object? key, Object? value) + => _map[key]?.contains(value) == true; + /// As [SetMultimap.forEach]. void forEach(void Function(K, V) f) { _map.forEach((key, values) { diff --git a/test/list_multimap/built_list_multimap_test.dart b/test/list_multimap/built_list_multimap_test.dart index f3e3de3..442a7e3 100644 --- a/test/list_multimap/built_list_multimap_test.dart +++ b/test/list_multimap/built_list_multimap_test.dart @@ -539,6 +539,30 @@ void main() { isFalse); }); + test('has a method like ListMultimap.contains', () { + expect( + BuiltListMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(1, '1'), + isTrue); + expect( + BuiltListMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(4, '1'), + isFalse); + expect( + BuiltListMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(2, '3'), + isFalse); + }); + test('has a method like ListMultimap.forEach', () { var totalKeys = 0; var concatenatedValues = ''; diff --git a/test/set_multimap/built_set_multimap_test.dart b/test/set_multimap/built_set_multimap_test.dart index fe7c99d..ff99ac8 100644 --- a/test/set_multimap/built_set_multimap_test.dart +++ b/test/set_multimap/built_set_multimap_test.dart @@ -537,6 +537,30 @@ void main() { isFalse); }); + test('has a method like SetMultimap.contains', () { + expect( + BuiltSetMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(1, '1'), + isTrue); + expect( + BuiltSetMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(4, '1'), + isFalse); + expect( + BuiltSetMultimap({ + 1: ['1'], + 2: ['2'], + 3: ['3'] + }).contains(2, '3'), + isFalse); + }); + test('has a method like SetMultimap.forEach', () { var totalKeys = 0; var concatenatedValues = '';