cpp_std 0.1.1

Bindings for C++ standard library
Documentation
use cpp_std::cpp_core::{
    vector_ops::{VectorAsMutSlice, VectorAsSlice},
    Ref, SliceAsBeginEnd,
};
use cpp_std::{VectorOfI32, VectorOfI64, VectorOfInt};

#[test]
fn vector_push_pop_slice() {
    unsafe {
        let mut x = VectorOfI32::new();
        assert!(x.empty());
        x.push_back(Ref::from_raw_ref(&1));
        x.push_back(Ref::from_raw_ref(&2));
        x.push_back(Ref::from_raw_ref(&3));
        assert!(!x.empty());

        assert_eq!(x.vector_as_slice(), &[1, 2, 3]);

        assert_eq!(x.back(), 3);
        x.pop_back();
        assert_eq!(x.back(), 2);
        x.pop_back();
        assert_eq!(x.back(), 1);
        x.pop_back();
        assert!(x.empty());
    }
}

#[test]
fn vector_as_mut_slice() {
    unsafe {
        let mut x = VectorOfInt::new();
        x.resize_2a(10, Ref::from_raw_ref(&5));
        assert_eq!(x.size(), 10);

        let slice = x.vector_as_mut_slice();
        assert_eq!(slice, &vec![5; 10][..]);
        slice[1] = 1;
        slice[2] = 777;

        assert_eq!(x.at(0), 5);
        assert_eq!(x.at(1), 1);
        assert_eq!(x.at(2), 777);
        assert_eq!(x.at(3), 5);
    }
}

#[test]
fn vector_from_slice() {
    unsafe {
        let data = &[2, 4, 6, 8][..];
        let x = VectorOfI64::from_2_i64(data.begin_ptr(), data.end_ptr());
        assert_eq!(x.size(), 4);
        assert_eq!(x.at(0), 2);
        assert_eq!(x.at(1), 4);
        assert_eq!(x.at(2), 6);
        assert_eq!(x.at(3), 8);
    }
}