From 410ababb11b452c65607d8d1a067acad59273579 Mon Sep 17 00:00:00 2001 From: Stephane Raux Date: Mon, 15 Jan 2024 10:56:19 -0600 Subject: [PATCH] Fix Sequence for Option --- enum-iterator/src/lib.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/enum-iterator/src/lib.rs b/enum-iterator/src/lib.rs index 30a880d..bff3485 100644 --- a/enum-iterator/src/lib.rs +++ b/enum-iterator/src/lib.rs @@ -572,7 +572,7 @@ impl Sequence for Option { fn next(&self) -> Option { match self { - None => Some(T::first()), + None => T::first().map(Some), Some(x) => x.next().map(Some), } } @@ -934,6 +934,21 @@ mod tests { assert!(all::>().eq([None, Some(false), Some(true)])); } + #[test] + fn all_bool_option_items_are_yielded_in_reverse() { + assert!(reverse_all::>().eq([Some(true), Some(false), None])); + } + + #[test] + fn all_infallible_option_items_are_yielded() { + assert!(all::>().eq([None])); + } + + #[test] + fn all_infallible_option_items_are_yielded_in_reverse() { + assert!(reverse_all::>().eq([None])); + } + #[test] fn cardinality_equals_item_count_for_ordering() { cardinality_equals_item_count::();