ckb_multi_index_map 0.0.2

MultiIndexMap: A generic multi index map inspired by boost multi index containers
Documentation
use ckb_multi_index_map::MultiIndexMap;
#[derive(MultiIndexMap, Clone, PartialEq, Debug)]
struct TestElement {
    #[multi_index(ordered_non_unique)]
    field1: usize,
    #[multi_index(ordered_unique)]
    field2: usize,
}

#[test]
fn test_non_unique_reverse_iter() {
    let mut s = MultiIndexTestElementMap::default();
    for i in 0..3 {
        s.insert(TestElement { field1: 1, field2: 10+i });
    }
    for i in 3..6 {
        s.insert(TestElement { field1: 0, field2: i });
    }

    let mut prev = 6;
    for (_i, elem) in s.iter_by_field1().rev().enumerate() {
        assert!(elem.field1 <= prev);
        prev = elem.field1;
    }

    let mut prev = 20; 
    for (_i, elem) in s.iter_by_field2().rev().enumerate() {
        assert!(elem.field2 <= prev);
        prev = elem.field2;
    }

    s.modify_by_field2(&12, |e| {e.field1 = 2});
    s.modify_by_field2(&3, |e| {e.field1 = 2});
    let mut prev = 6;
    for (_i, elem) in s.iter_by_field1().rev().enumerate() {
        assert!(elem.field1 <= prev);
        prev = elem.field1;
    } 

    let mut prev = 20; 
    for (_i, elem) in s.iter_by_field2().rev().enumerate() {
        assert!(elem.field2 <= prev);
        prev = elem.field2;
    }

    let mut it = s.iter_by_field2();
    assert_eq!(it.next_back().unwrap().field2, 12);
    assert_eq!(it.next_back().unwrap().field2, 11);
    assert_eq!(it.next_back().unwrap().field2, 10);
    assert_eq!(it.next_back().unwrap().field2, 5);
    assert_eq!(it.next_back().unwrap().field2, 4);
    assert_eq!(it.next_back().unwrap().field2, 3);
    assert_eq!(it.next_back(), None);

}