From abb5adcdd3e0abe57a6bd66372680740ae571630 Mon Sep 17 00:00:00 2001 From: ia7ck <23146842+ia7ck@users.noreply.github.com> Date: Sat, 20 Dec 2025 20:42:57 +0900 Subject: [PATCH 1/4] at --- libs/zarts/src/lib.rs | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/libs/zarts/src/lib.rs b/libs/zarts/src/lib.rs index c72e915e..29206b20 100644 --- a/libs/zarts/src/lib.rs +++ b/libs/zarts/src/lib.rs @@ -17,10 +17,11 @@ use std::{ /// assert_eq!(seq.ord(&2), 2); /// assert_eq!(seq.ord(&5), 3); /// -/// assert_eq!(seq.at(0), &(-3)); -/// assert_eq!(seq.at(1), &(-1)); -/// assert_eq!(seq.at(2), &2); -/// assert_eq!(seq.at(3), &5); +/// assert_eq!(seq.at(0), Some(&(-3))); +/// assert_eq!(seq.at(1), Some(&(-1))); +/// assert_eq!(seq.at(2), Some(&2)); +/// assert_eq!(seq.at(3), Some(&5)); +/// assert_eq!(seq.at(4), None); /// ``` /// /// # Panics @@ -34,15 +35,6 @@ use std::{ /// seq.ord(&4); /// ``` /// -/// index が集合のサイズ以上だとパニックです。 -/// -/// ```should_panic -/// use zarts::SortedSeq; -/// let values = vec![1, 1, 2, 2, 3, 4, 9, 9]; -/// let seq = SortedSeq::new(values); -/// seq.at(5); -/// ``` -/// pub struct SortedSeq(Vec); impl SortedSeq @@ -63,8 +55,8 @@ where } /// index 番目の値を返します - pub fn at(&self, index: usize) -> &T { - &self[index] + pub fn at(&self, index: usize) -> Option<&T> { + self.0.get(index) } /// 集合のサイズを返します @@ -121,10 +113,11 @@ mod tests { fn index_test() { let seq = SortedSeq::new(vec![4, 4, 2, 5, 2, 9]); // 2, 4, 5, 9 - assert_eq!(seq.at(0), &2); - assert_eq!(seq.at(1), &4); - assert_eq!(seq.at(2), &5); - assert_eq!(seq.at(3), &9); + assert_eq!(seq.at(0), Some(&2)); + assert_eq!(seq.at(1), Some(&4)); + assert_eq!(seq.at(2), Some(&5)); + assert_eq!(seq.at(3), Some(&9)); + assert_eq!(seq.at(4), None); } #[test] From 9b424c7bfba78f3317d733adf55049ac3bf666e4 Mon Sep 17 00:00:00 2001 From: ia7ck <23146842+ia7ck@users.noreply.github.com> Date: Sun, 21 Dec 2025 03:53:04 +0900 Subject: [PATCH 2/4] add examples --- libs/zarts/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libs/zarts/src/lib.rs b/libs/zarts/src/lib.rs index 29206b20..49350ebb 100644 --- a/libs/zarts/src/lib.rs +++ b/libs/zarts/src/lib.rs @@ -55,6 +55,20 @@ where } /// index 番目の値を返します + /// + /// # Examples + /// + /// ``` + /// use zarts::SortedSeq; + /// + /// let seq = SortedSeq::new(vec![4, 16, 9, 1]); + /// // 1, 4, 9, 16 + /// assert_eq!(seq.at(0), Some(&1)); + /// assert_eq!(seq.at(1), Some(&4)); + /// assert_eq!(seq[2], 9); + /// assert_eq!(seq[3], 16); + /// assert_eq!(seq.at(4), None); + /// ``` pub fn at(&self, index: usize) -> Option<&T> { self.0.get(index) } From bd7d8d28c5a4b0b16550ff848d4d10855780d00c Mon Sep 17 00:00:00 2001 From: ia7ck <23146842+ia7ck@users.noreply.github.com> Date: Sat, 20 Dec 2025 20:49:19 +0900 Subject: [PATCH 3/4] clone, eq --- libs/zarts/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/zarts/src/lib.rs b/libs/zarts/src/lib.rs index 49350ebb..feb929d4 100644 --- a/libs/zarts/src/lib.rs +++ b/libs/zarts/src/lib.rs @@ -35,6 +35,7 @@ use std::{ /// seq.ord(&4); /// ``` /// +#[derive(Clone, PartialEq, Eq)] pub struct SortedSeq(Vec); impl SortedSeq From 2ee503516ab8e4c8c473d640b13f8393272e3854 Mon Sep 17 00:00:00 2001 From: ia7ck <23146842+ia7ck@users.noreply.github.com> Date: Sun, 21 Dec 2025 03:55:07 +0900 Subject: [PATCH 4/4] iter --- libs/zarts/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/zarts/src/lib.rs b/libs/zarts/src/lib.rs index feb929d4..2f932998 100644 --- a/libs/zarts/src/lib.rs +++ b/libs/zarts/src/lib.rs @@ -82,6 +82,10 @@ where pub fn is_empty(&self) -> bool { self.0.is_empty() } + + pub fn iter(&self) -> impl Iterator { + self.0.iter() + } } impl FromIterator for SortedSeq