1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
mod optioniter;
mod resultiter;
pub use optioniter::OptionIter;
pub use resultiter::ResultIter;

#[cfg(test)]
mod tests {
    use optioniter::OptionIter;
    use resultiter::ResultIter;

    #[test]
    fn options_unwrap() {
        let a: Vec<Option<i32>> = vec![Some(1), Some(2), Some(3)];
        let v: Vec<_> = a.into_iter().unwrap().collect();
        assert_eq!(v, vec![1i32, 2, 3]);
    }

    #[test]
    fn options_unwrap_or() {
        let a: Vec<Option<i32>> = vec![Some(1), None, Some(3)];
        let v: Vec<_> = a.into_iter().unwrap_or(5).collect();
        assert_eq!(v, vec![1i32, 5, 3]);
    }

    #[test]
    fn options_count_some() {
        let a: Vec<Option<i32>> = vec![Some(1), None, Some(3)];
        let n = a.into_iter().count_some();
        assert_eq!(n, 2);
    }

    #[test]
    fn options_find_some() {
        let a: Vec<Option<i32>> = vec![Some(1), None, Some(3)];
        let mut it = a.into_iter();
        assert_eq!(it.find_some(), Some(1));
        assert_eq!(it.find_some(), Some(3));
        assert_eq!(it.find_some(), None);
    }

    #[test]
    fn options_has_some() {
        let a: Vec<Option<i32>> = vec![None, Some(3), None];
        assert_eq!(a.into_iter().has_some(), true);
        let a: Vec<Option<i32>> = vec![None, None, None];
        assert_eq!(a.into_iter().has_some(), false);
    }

    #[test]
    fn options_has_none() {
        let a: Vec<Option<i32>> = vec![Some(3), None, Some(1)];
        assert_eq!(a.into_iter().has_none(), true);
        let a: Vec<Option<i32>> = vec![Some(1), Some(2), Some(3)];
        assert_eq!(a.into_iter().has_none(), false);
    }

    #[test]
    fn options_some_iter() {
        let a: Vec<Option<i32>> = vec![Some(3), None, Some(1)];
        let v: Vec<_> = a.into_iter().some_iter().collect();
        assert_eq!(vec![3i32, 1], v);
    }

    #[test]
    fn results_unwrap() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Ok(2), Ok(3)];
        let v: Vec<_> = a.into_iter().unwrap().collect();
        assert_eq!(v, vec![1i32, 2, 3]);
    }

    #[test]
    fn results_unwrap_or() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Err(()), Ok(3)];
        let v: Vec<_> = a.into_iter().unwrap_or(5).collect();
        assert_eq!(v, vec![1i32, 5, 3]);
    }

    #[test]
    fn results_count_ok() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Err(()), Ok(3)];
        assert_eq!(a.into_iter().count_ok(), 2);
    }

    #[test]
    fn results_count_err() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Err(()), Ok(3)];
        assert_eq!(a.into_iter().count_err(), 1)
    }

    #[test]
    fn results_count_ok_err() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Err(()), Ok(3)];
        assert_eq!(a.into_iter().count_ok_err(), (2, 1))
    }

    #[test]
    fn results_find_ok() {
        let a: Vec<Result<i32, ()>> = vec![Ok(1), Err(()), Ok(3)];
        let mut it = a.into_iter();
        assert_eq!(it.find_ok(), Some(1));
        assert_eq!(it.find_ok(), Some(3));
        assert_eq!(it.find_ok(), None);
    }

    #[test]
    fn results_find_err() {
        let a: Vec<Result<(), i32>> = vec![Err(1), Ok(()), Err(3)];
        let mut it = a.into_iter();
        assert_eq!(it.find_err(), Some(1));
        assert_eq!(it.find_err(), Some(3));
        assert_eq!(it.find_err(), None);
    }

    #[test]
    fn results_has_ok() {
        let a: Vec<Result<(), ()>> = vec![Err(()), Err(()), Ok(())];
        assert_eq!(a.into_iter().has_ok(), true);
        let a: Vec<Result<(), ()>> = vec![Err(()), Err(()), Err(())];
        assert_eq!(a.into_iter().has_ok(), false);
    }

    #[test]
    fn results_has_err() {
        let a: Vec<Result<(), ()>> = vec![Ok(()), Err(()), Ok(())];
        assert_eq!(a.into_iter().has_err(), true);
        let a: Vec<Result<(), ()>> = vec![Ok(()), Ok(()), Ok(())];
        assert_eq!(a.into_iter().has_err(), false);
    }

    #[test]
    fn results_ok_iter() {
        let a: Vec<Result<i32, i32>> = vec![Ok(1), Err(2), Ok(3), Err(4)];
        let v: Vec<_> = a.into_iter().ok_iter().collect();
        assert_eq!(vec![1i32, 3], v);
    }

    #[test]
    fn results_err_iter() {
        let a: Vec<Result<i32, i32>> = vec![Ok(1), Err(2), Ok(3), Err(4)];
        let v: Vec<_> = a.into_iter().err_iter().collect();
        assert_eq!(vec![2i32, 4], v);
    }
}