rustsim-spaces 0.0.1

Space implementations (grid, continuous, graph, hybrid) for rustsim
Documentation
use rustsim_spaces::grid::{Grid2D, Grid2DSingle, GridError};

#[test]
fn grid2d_add_remove() {
    let mut grid = Grid2D::new(4, 3, false);
    assert!(grid.is_empty((1, 1)));

    grid.add_agent((1, 1), 42).unwrap();
    grid.add_agent((1, 1), 7).unwrap();

    let ids = grid.ids_in_position((1, 1)).unwrap();
    assert_eq!(ids.len(), 2);

    assert!(grid.remove_agent((1, 1), 42).unwrap());
    assert!(!grid.remove_agent((1, 1), 42).unwrap());
}

#[test]
fn grid2d_single_occupancy() {
    let mut grid = Grid2DSingle::new(2, 2, false);
    grid.add_agent((0, 0), 10).unwrap();

    assert_eq!(grid.add_agent((0, 0), 11), Err(GridError::Occupied((0, 0))));
    assert_eq!(grid.id_in_position((0, 0)), Some(10));

    assert!(!grid.remove_agent((0, 0), 11).unwrap());
    assert!(grid.remove_agent((0, 0), 10).unwrap());
    assert_eq!(grid.id_in_position((0, 0)), None);
}