Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/fallible-iterator/src/   (Firefox Browser Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 12 kB image not shown  

Quelle  test.rs

  Sprache: Rust
 

use alloc::{vec, vec::Vec};
use core::{iter, ops::Range};

use super::{convert, FallibleIterator, IntoFallible};

#[test]
fn all() {
    assert!(convert([0123].iter().map(Ok::<&u32, ()>))
        .all(|&i| Ok(i < 4))
        .unwrap());
    assert!(!convert([0124].iter().map(Ok::<&u32, ()>))
        .all(|&i| Ok(i < 4))
        .unwrap());
    assert!(convert([0124].iter().map(Ok::<&u32, ()>))
        .all(|_| Err(()))
        .is_err());
}

#[test]
fn any() {
    assert!(convert([0123].iter().map(Ok::<&u32, ()>))
        .any(|&i| Ok(i == 3))
        .unwrap());
    assert!(!convert([0124].iter().map(Ok::<&u32, ()>))
        .any(|&i| Ok(i == 3))
        .unwrap());
    assert!(convert([0124].iter().map(Ok::<&u32, ()>))
        .any(|_| Err(()))
        .is_err());
}

#[test]
fn chain() {
    let a = convert(vec![0123].into_iter().map(Ok::<u32, ()>));
    let b = convert(vec![4567].into_iter().map(Ok::<u32, ()>));
    let it = a.chain(b);

    assert_eq!(it.collect::<Vec<_>>().unwrap(), [01234567]);

    let a = convert(vec![0123].into_iter().map(Ok::<u32, ()>));
    let b = convert(vec![4567].into_iter().map(Ok::<u32, ()>));
    let it = a.chain(b).rev();

    assert_eq!(it.collect::<Vec<_>>().unwrap(), [76543210]);
}

#[test]
fn count() {
    assert_eq!(
        convert([0123].iter().map(Ok::<&u32, ()>))
            .count()
            .unwrap(),
        4
    );

    let it = Some(Ok(1)).into_iter().chain(iter::repeat(Err(())));
    assert!(convert(it).count().is_err());
}

#[test]
fn enumerate() {
    let it = convert(vec![5678].into_iter().map(Ok::<u32, ()>)).enumerate();

    assert_eq!(
        it.collect::<Vec<_>>().unwrap(),
        [(05), (16), (27), (38)]
    );
}

#[test]
fn filter() {
    let it = convert(vec![0123].into_iter().map(Ok::<u32, u32>));
    let it = it.filter(|&x| if x % 2 == 0 { Ok(x % 3 == 0) } else { Err(x) });

    assert_eq!(it.clone().collect::<Vec<_>>(), Err(1));
    assert_eq!(it.rev().collect::<Vec<_>>(), Err(3));

    let it = convert(vec![0246].into_iter().map(Ok::<u32, u32>));
    let it = it.filter(|&x| if x % 2 == 0 { Ok(x % 3 == 0) } else { Err(x) });

    assert_eq!(it.clone().collect::<Vec<_>>(), Ok(vec![06]));
    assert_eq!(it.rev().collect::<Vec<_>>(), Ok(vec![60]))
}

#[test]
fn filter_map() {
    fn twos_and_threes(x: u32) -> Result<Option<u32>, u32> {
        if x % 2 == 0 {
            Ok(Some(x + 10))
        } else if x % 3 == 0 {
            Ok(None)
        } else {
            Err(x)
        }
    }

    let it = convert(vec![0123456].into_iter().map(Ok::<u32, u32>))
        .filter_map(twos_and_threes);

    assert_eq!(it.clone().collect::<Vec<_>>(), Err(1));
    assert_eq!(it.rev().collect::<Vec<_>>(), Err(5));

    let it =
        convert(vec![02346].into_iter().map(Ok::<u32, u32>)).filter_map(twos_and_threes);

    assert_eq!(it.clone().collect::<Vec<_>>(), Ok(vec![10121416]));
    assert_eq!(it.rev().collect::<Vec<_>>(), Ok(vec![16141210]));
}

#[test]
fn find() {
    let mut it = convert(vec![0123].into_iter().map(Ok::<u32, u32>));

    assert_eq!(it.find(|x| Ok(x % 2 == 1)), Ok(Some(1)));
    assert_eq!(it.next(), Ok(Some(2)));

    let it = convert(vec![0123].into_iter().map(Ok::<u32, u32>));
    assert_eq!(
        it.clone()
            .find(|&x| if x == 2 { Err(29) } else { Ok(false) }),
        Err(29)
    );
    assert_eq!(
        it.clone()
            .find(|&x| if x == 2 { Err(29) } else { Ok(true) }),
        Ok(Some(0))
    );
    assert_eq!(
        it.clone()
            .rev()
            .find(|&x| if x == 2 { Err(29) } else { Ok(false) }),
        Err(29)
    );
    assert_eq!(
        it.rev().find(|&x| if x == 2 { Err(29) } else { Ok(true) }),
        Ok(Some(3))
    );
}

#[test]
fn fold() {
    fn add_smol(a: u32, b: u32) -> Result<u32, u32> {
        if b <= 2 {
            Ok(a + b)
        } else {
            Err(b)
        }
    }

    let it = convert(vec![0132].into_iter().map(Ok::<u32, u32>));
    assert_eq!(it.fold(0, add_smol), Err(3));

    let it = convert(vec![0121].into_iter().map(Ok::<u32, u32>));
    assert_eq!(it.fold(0, add_smol), Ok(4));
}

#[test]
fn for_each() {
    let it = convert(vec![0123].into_iter().map(Ok::<u32, ()>));

    let mut acc = vec![];
    it.for_each(|n| {
        acc.push(n);
        Ok(())
    })
    .unwrap();
    assert_eq!(acc, vec![0123]);
}

#[test]
fn iterator() {
    let it = convert(
        "ab cd"
            .chars()
            .map(|c| if c.is_whitespace() { Err(()) } else { Ok(c) }),
    );

    assert!(it.clone().count().is_err());
    assert!(it.clone().rev().count().is_err());
    assert_eq!(it.clone().iterator().count(), 5);
    assert_eq!(it.clone().iterator().rev().count(), 5);
}

#[test]
fn last() {
    let it = convert(vec![0123].into_iter().map(Ok::<u32, ()>));
    assert_eq!(it.last().unwrap(), Some(3));
}

#[test]
fn map() {
    let it = convert(vec![01234].into_iter().map(Ok::<u32, ()>)).map(|n| Ok(n * 2));
    fn assert_debug(_: &impl core::fmt::Debug) {}
    assert_debug(&it);
    assert_eq!(it.clone().collect::<Vec<_>>().unwrap(), [02468]);
    assert_eq!(it.rev().collect::<Vec<_>>().unwrap(), [86420]);

    let it = convert(vec![01234].into_iter().map(Ok::<u32, ()>)).map(|n| {
        if n == 2 {
            Err(())
        } else {
            Ok(n * 2)
        }
    });

    {
        let mut it = it.clone();
        assert_eq!(it.next(), Ok(Some(0)));
        assert_eq!(it.next(), Ok(Some(2)));
        assert_eq!(it.next(), Err(()));
    }

    {
        let mut it = it.rev();
        assert_eq!(it.next(), Ok(Some(8)));
        assert_eq!(it.next(), Ok(Some(6)));
        assert_eq!(it.next(), Err(()));
    }
}

#[test]
fn map_err() {
    let it = convert(
        vec![0123]
            .into_iter()
            .map(|n| if n % 2 == 0 { Ok(n) } else { Err(n) }),
    );

    assert_eq!(it.clone().collect::<Vec<_>>(), Err(1));
    assert_eq!(it.rev().collect::<Vec<_>>(), Err(3));
}

#[test]
fn max() {
    let it = convert(vec![031, -10].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.max().unwrap(), Some(3));
}

#[test]
fn max_by_key() {
    let it = convert(vec![031, -10].into_iter().map(Ok::<i32, i32>));
    assert_eq!(it.clone().max_by_key(|&i| Ok(-i)), Ok(Some(-10)));
    // Exercise failure both on the first item, and later.
    assert_eq!(it.clone().max_by_key(|&i| Err::<i32, _>(i)), Err(0));
    assert_eq!(
        it.max_by_key(|&i| if i > 0 { Err(i) } else { Ok(-i) }),
        Err(3)
    );
}

#[test]
fn max_by() {
    let it = convert(vec![031, -10].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.max_by(|a, b| Ok(b.cmp(a))), Ok(Some(-10)));
}

#[test]
fn min() {
    let it = convert(vec![03, -101].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.min().unwrap(), Some(-10));
}

#[test]
fn min_by_key() {
    let it = convert(vec![031, -10].into_iter().map(Ok::<i32, i32>));
    assert_eq!(it.clone().min_by_key(|&i| Ok(-i)), Ok(Some(3)));
    // Exercise failure both on the first item, and later.
    assert_eq!(it.clone().min_by_key(|&i| Err::<i32, _>(i)), Err(0));
    assert_eq!(
        it.min_by_key(|&i| if i > 0 { Err(i) } else { Ok(-i) }),
        Err(3)
    );
}

#[test]
fn min_by() {
    let it = convert(vec![031, -10].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.min_by(|a, b| Ok(b.cmp(a))), Ok(Some(3)));
}

#[test]
fn nth() {
    let mut it = convert(vec![0123].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.nth(1).unwrap(), Some(1));
    assert_eq!(it.nth(0).unwrap(), Some(2));
    assert_eq!(it.nth(2).unwrap(), None);
}

#[test]
fn peekable() {
    let mut it = convert(vec![01].into_iter().map(Ok::<i32, ()>)).peekable();
    assert_eq!(it.peek().unwrap(), Some(&0));
    assert_eq!(it.peek().unwrap(), Some(&0));
    assert_eq!(it.next().unwrap(), Some(0));
    assert_eq!(it.next().unwrap(), Some(1));
    assert_eq!(it.peek().unwrap(), None);
    assert_eq!(it.next().unwrap(), None);
}

#[test]
fn position() {
    let mut it = convert(vec![1234].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.position(|n| Ok(n == 2)).unwrap(), Some(1));
    assert_eq!(it.position(|n| Ok(n == 3)).unwrap(), Some(0));
    assert_eq!(it.position(|n| Ok(n == 5)).unwrap(), None);

    let mut it = convert(vec![1234].into_iter().map(Ok::<i32, i32>));
    assert_eq!(
        it.clone()
            .position(|n| if n == 3 { Err(42) } else { Ok(n == 2) }),
        Ok(Some(1))
    );
    assert_eq!(
        it.position(|n| if n == 3 { Err(42) } else { Ok(n == 4) }),
        Err(42)
    );
}

#[test]
fn scan() {
    let it = convert(vec![1234].into_iter().map(Ok::<i32, ()>)).scan(0, |st, v| {
        if v > 3 {
            Ok(None)
        } else {
            *st += v;
            Ok(Some(-*st))
        }
    });
    assert_eq!(it.collect::<Vec<_>>(), Ok(vec![-1, -3, -6]));
}

#[test]
fn skip() {
    let it = convert(vec![1234].into_iter().map(Ok::<i32, ()>));
    assert_eq!(it.clone().skip(0).collect::<Vec<_>>(), Ok(vec![1234]));
    assert_eq!(it.clone().skip(2).collect::<Vec<_>>(), Ok(vec![34]));
    assert_eq!(it.skip(4).collect::<Vec<_>>(), Ok(vec![]));
}

#[test]
fn skip_while() {
    let it = convert(vec![12341].into_iter().map(Ok::<i32, ()>));
    assert_eq!(
        it.clone().skip_while(|x| Ok(*x < 1)).collect::<Vec<_>>(),
        Ok(vec![12341])
    );
    assert_eq!(
        it.clone().skip_while(|x| Ok(*x < 3)).collect::<Vec<_>>(),
        Ok(vec![341])
    );
    assert_eq!(
        it.skip_while(|x| Ok(*x < 5)).collect::<Vec<_>>(),
        Ok(vec![])
    );
}

#[test]
fn step_by() {
    let it = convert(
        vec![012345678]
            .into_iter()
            .map(Ok::<i32, ()>),
    )
    .step_by(3);
    assert_eq!(it.collect::<Vec<_>>(), Ok(vec![036]));
}

#[test]
fn take() {
    let it = convert(vec![0123].into_iter().map(Ok::<i32, ()>)).take(2);
    assert_eq!(it.collect::<Vec<_>>().unwrap(), [01]);
}

#[test]
fn take_while() {
    let it = convert(vec![01230].into_iter().map(Ok::<i32, ()>));
    assert_eq!(
        it.clone().take_while(|x| Ok(*x < 0)).collect::<Vec<_>>(),
        Ok(vec![])
    );
    assert_eq!(
        it.clone().take_while(|x| Ok(*x < 2)).collect::<Vec<_>>(),
        Ok(vec![01])
    );
    assert_eq!(
        it.take_while(|x| Ok(*x < 4)).collect::<Vec<_>>(),
        Ok(vec![01230])
    );
}

#[test]
fn flat_map() {
    let it = convert(vec![0..10..01..5].into_iter().map(Ok::<Range<i32>, ()>))
        .flat_map(|r| Ok(convert(r.map(Ok::<i32, ()>))));
    assert_eq!(it.collect::<Vec<_>>(), Ok(vec![01234]));
}

#[test]
fn flatten() {
    let it = convert(
        vec![0..10..01..5]
            .into_iter()
            .map(|r| convert(r.map(Ok::<i32, ()>)))
            .map(Ok::<_, ()>),
    )
    .flatten();
    assert_eq!(it.collect::<Vec<_>>(), Ok(vec![01234]));
}

#[test]
fn inspect() {
    let mut buf = vec![];
    let it = convert(vec![0123].into_iter().map(Ok::<i32, ()>)).inspect(|&v| {
        buf.push(v);
        Ok(())
    });
    it.count().unwrap();
    assert_eq!(buf, vec![0123]);
}

#[test]
fn partition() {
    let it = convert(vec![0123].into_iter().map(Ok::<i32, ()>));
    let (even, odd): (Vec<i32>, Vec<i32>) = it.partition(|i| Ok(*i % 2 == 0)).unwrap();
    assert_eq!(even, vec![02]);
    assert_eq!(odd, vec![13]);
}

#[test]
fn find_map() {
    let mut it = convert(vec![0123].into_iter().map(Ok::<i32, ()>));
    assert_eq!(
        it.find_map(|v| match v {
            2 => Ok(Some("hi")),
            _ => Ok(None),
        }),
        Ok(Some("hi"))
    );
}

#[test]
fn unzip() {
    let it = convert(
        vec![(00), (1, -1), (2, -2), (3, -3)]
            .into_iter()
            .map(Ok::<_, ()>),
    );
    let (pos, neg): (Vec<i32>, Vec<i32>) = it.unzip().unwrap();
    assert_eq!(pos, vec![0123]);
    assert_eq!(neg, vec![0, -1, -2, -3]);
}

#[test]
fn cycle() {
    let it = convert(vec![0123].into_iter().map(Ok::<i32, ()>)).cycle();
    assert_eq!(it.take(6).collect::<Vec<_>>(), Ok(vec![012301]));
}

#[test]
fn unwrap() {
    let it = convert(vec![0123].into_iter().map(Ok::<i32, ()>)).unwrap();
    assert_eq!(it.collect::<Vec<_>>(), vec![0123]);
}

#[test]
#[should_panic]
fn unwrap_panic() {
    let _ = convert(vec![Ok(0), Err(())].into_iter())
        .unwrap()
        .collect::<Vec<_>>();
}

#[test]
fn wrap_std_iter_into_fallible() {
    let it = IntoFallible::from(vec![0123].into_iter());
    assert_eq!(it.collect::<Vec<_>>().unwrap(), vec![0123]);
}

Messung V0.5 in Prozent
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-06-18) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.