boppo_core 0.1.0

The core APIs for creating activities for the Boppo tablet
Documentation
use crate::{Column, Row};

use super::*;
#[test]
fn test_invert() {
    assert_eq!(Lights::all().invert(), Lights::none());
    let one = Lights::from_index(1);
    let one_inverted = one.invert();
    assert_eq!(one_inverted.len(), 39);
    assert_eq!(one_inverted.as_bitset() & 0x2, 0);
}

#[test]
fn test_indices_reverse() {
    let mut iter = Lights::none().indices();
    assert_eq!(iter.next_back(), None);

    let mut iter = Lights::from_indices([0_usize]).indices();
    assert_eq!(iter.next_back(), Some(0));
    assert_eq!(iter.next_back(), None);

    let mut iter = Lights::all().indices();
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next_back(), Some(39));
    assert_eq!(iter.next_back(), Some(38));
    assert_eq!(iter.next(), Some(1));
    assert_eq!(iter.next_back(), Some(37));
    assert_eq!(iter.next_back(), Some(36));
    assert_eq!(iter.next(), Some(2));
}

#[test]
fn test_rotate_180() {
    assert_eq!(Lights::from_index(0).rotate_180(), Lights::from_index(39));
    assert_eq!(Lights::from_index(1).rotate_180(), Lights::from_index(38));
    assert_eq!(Lights::from_index(3).rotate_180(), Lights::from_index(36));
    assert_eq!(Lights::from_index(4).rotate_180(), Lights::from_index(35));
    assert_eq!(Lights::from_index(5).rotate_180(), Lights::from_index(34));
    assert_eq!(Lights::from_index(0), Lights::from_index(39).rotate_180());
    assert_eq!(Lights::from_index(1), Lights::from_index(38).rotate_180());
    assert_eq!(Lights::from_index(3), Lights::from_index(36).rotate_180());
    assert_eq!(Lights::from_index(4), Lights::from_index(35).rotate_180());
    assert_eq!(Lights::from_index(5), Lights::from_index(34).rotate_180());
    assert_eq!(
        Lights::from_indices([0, 8]).rotate_180(),
        Lights::from_indices([31, 39])
    );
    assert_eq!(Lights::all().rotate_180(), Lights::all());
    assert_eq!(Lights::none().rotate_180(), Lights::none());
}

#[test]
fn test_from_buttons() {
    let lights: Lights = Buttons::from_index(0).into();
    assert_eq!(lights, Lights::all_from_button(Button::from_index(0)));

    let lights: Lights = Buttons::from_index(9).into();
    assert_eq!(lights, Lights::all_from_button(Button::from_index(9)));

    let lights: Lights = Buttons::column(Column::C0).into();
    assert_eq!(lights, Lights::from_bitset(0b1111_0000_0000_0000_0000_1111));

    let lights: Lights = Buttons::row(Row::Top).into();
    assert_eq!(lights, Lights::from_bitset(0b1111_1111_1111_1111_1111));

    let lights: Lights = Buttons::row(Row::Bottom).into();
    assert_eq!(
        lights,
        Lights::from_bitset(0b1111_1111_1111_1111_1111_0000_0000_0000_0000_0000)
    );

    let lights: Lights = Buttons::all().into();
    assert_eq!(lights, Lights::all());
}