Skip to content
Merged

zarts #194

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 31 additions & 19 deletions libs/zarts/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -34,15 +35,7 @@ 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);
/// ```
///
#[derive(Clone, PartialEq, Eq)]
pub struct SortedSeq<T>(Vec<T>);

impl<T> SortedSeq<T>
Expand All @@ -63,8 +56,22 @@ where
}

/// index 番目の値を返します
pub fn at(&self, index: usize) -> &T {
&self[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)
}

/// 集合のサイズを返します
Expand All @@ -75,6 +82,10 @@ where
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}

Copy link

Copilot AI Dec 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new iter() method is missing documentation. Public API methods should include doc comments with a description of what the method does and examples of its usage.

Suggested change
/// 集合内の要素に対するイテレータを返します
///
/// 昇順にソートされた順番で要素を走査します。
///
/// # Examples
///
/// ```
/// use zarts::SortedSeq;
///
/// let seq = SortedSeq::new(vec![4, 16, 9, 1]);
/// let collected: Vec<_> = seq.iter().copied().collect();
/// // 1, 4, 9, 16
/// assert_eq!(collected, vec![1, 4, 9, 16]);
/// ```

Copilot uses AI. Check for mistakes.
pub fn iter(&self) -> impl Iterator<Item = &T> {
self.0.iter()
}
Comment on lines +86 to +88
Copy link

Copilot AI Dec 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new iter() method lacks test coverage. Consider adding a test case that verifies the iterator behavior, similar to the existing tests for other methods.

Copilot uses AI. Check for mistakes.
}

impl<T> FromIterator<T> for SortedSeq<T>
Expand Down Expand Up @@ -121,10 +132,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]
Expand Down