socketcan-alt 0.4.0

Rust binding for SocketCAN
Documentation
use super::Frame;
use crate::{sys, Id};
use std::mem::{align_of, size_of, MaybeUninit};

#[test]
fn test_layout() {
    assert_eq!(align_of::<sys::can_frame>(), align_of::<sys::canfd_frame>());
}

#[test]
fn test_data_standard() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 42;
        Frame::from_raw(frame, size_of::<sys::can_frame>())
    };
    match frame {
        Some(Frame::Data(frame)) => assert_eq!(frame.id(), Id::Standard(42)),
        _ => panic!(),
    }
}

#[test]
fn test_data_extended() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 4242 | sys::CAN_EFF_FLAG;
        Frame::from_raw(frame, size_of::<sys::can_frame>())
    };
    match frame {
        Some(Frame::Data(frame)) => assert_eq!(frame.id(), Id::Extended(4242)),
        _ => panic!(),
    }
}

#[test]
fn test_fd_data_standard() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 42;
        Frame::from_raw(frame, size_of::<sys::canfd_frame>())
    };
    match frame {
        Some(Frame::FdData(frame)) => assert_eq!(frame.id(), Id::Standard(42)),
        _ => panic!(),
    }
}

#[test]
fn test_fd_data_extended() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 4242 | sys::CAN_EFF_FLAG;
        Frame::from_raw(frame, size_of::<sys::canfd_frame>())
    };
    match frame {
        Some(Frame::FdData(frame)) => assert_eq!(frame.id(), Id::Extended(4242)),
        _ => panic!(),
    }
}

#[test]
fn test_remote_standard() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 42 | sys::CAN_RTR_FLAG;
        Frame::from_raw(frame, size_of::<sys::can_frame>())
    };
    match frame {
        Some(Frame::Remote(frame)) => assert_eq!(frame.id(), Id::Standard(42)),
        _ => panic!(),
    }
}

#[test]
fn test_remote_extended() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = 4242 | sys::CAN_EFF_FLAG | sys::CAN_RTR_FLAG;
        Frame::from_raw(frame, size_of::<sys::can_frame>())
    };
    match frame {
        Some(Frame::Remote(frame)) => assert_eq!(frame.id(), Id::Extended(4242)),
        _ => panic!(),
    }
}

#[test]
fn test_error() {
    let mut frame = MaybeUninit::<sys::canfd_frame>::zeroed();
    let frame = unsafe {
        (*frame.as_mut_ptr()).can_id = sys::CAN_ERR_FLAG;
        Frame::from_raw(frame, size_of::<sys::can_frame>())
    };
    match frame {
        Some(Frame::Error(_)) => (),
        _ => panic!(),
    }
}