Skip to content

crossbeam_skiplist::Range rewinds to the head after it was exhausted #1142

@al8n

Description

@al8n

Hi, I found that the implementation of the Iterator trait for Range will rewind to the head after it is exhausted. The test case below can reproduce this behavior. Is it an expected behavior or should this be a bug?

#[test]
fn range() {
    use crate::Bound::*;
    let guard = &epoch::pin();
    let s = SkipList::new(epoch::default_collector().clone());
    let v = (0..10).map(|x| x * 10).collect::<Vec<_>>();
    for &x in v.iter() {
        s.insert(x, x, guard).release(guard);
    }

    let mut it = s.range(..=5, guard);
    for _ent in &mut it {}

    let ent = it.next();
    assert!(ent.is_none(), "{ent:?}"); // panic, but why? it should be none, but yield the first element Entry(0, 0) again
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions