use deep_causality_data_structures::{ArrayGrid, ArrayType, PointIndex};
const WIDTH: usize = 5;
const HEIGHT: usize = 5;
const DEPTH: usize = 5;
const TIME: usize = 5;
fn get_array_grid<T: Copy + Default>(
array_type: ArrayType,
) -> ArrayGrid<T, WIDTH, HEIGHT, DEPTH, TIME> {
ArrayGrid::new(array_type)
}
pub fn main() {
println!("\n1. Testing 1D Array:");
let array_type = ArrayType::Array1D;
let ag = get_array_grid(array_type);
let p = PointIndex::new1d(1);
ag.set(p, 42);
let res = ag.get(p);
println!("Value at 1D point index {p}: {res}");
assert_eq!(res, 42);
println!("\n2. Testing 3D Array:");
let array_type = ArrayType::Array3D;
let ag = get_array_grid(array_type);
let p = PointIndex::new3d(1, 2, 3);
ag.set(p, 3);
let res = ag.get(p);
println!("Value at 3D point index {p}: {res}");
assert_eq!(res, 3);
println!("\n3. Testing 4D Array with Custom Struct:");
#[derive(Debug, Default, Copy, Clone)]
struct MyStruct {
number: usize,
mod_five: bool,
}
let array_type = ArrayType::Array4D;
let ag: ArrayGrid<MyStruct, WIDTH, HEIGHT, DEPTH, TIME> = ArrayGrid::new(array_type);
let idx_t0 = PointIndex::new4d(1, 1, 1, 0);
let idx_t1 = PointIndex::new4d(1, 1, 1, 1);
let idx_t2 = PointIndex::new4d(1, 1, 1, 2);
let my_struct_t0 = MyStruct {
number: 23,
mod_five: false,
};
let my_struct_t1 = MyStruct {
number: 24,
mod_five: false,
};
let my_struct_t2 = MyStruct {
number: 25,
mod_five: true,
};
ag.set(idx_t0, my_struct_t0);
ag.set(idx_t1, my_struct_t1);
ag.set(idx_t2, my_struct_t2);
println!("Values at fixed position (1,1,1) over time:");
println!("t=0: {:?}", ag.get(idx_t0));
println!("t=1: {:?}", ag.get(idx_t1));
println!("t=2: {:?}", ag.get(idx_t2));
let res = ag.get(idx_t2);
assert_eq!(res.number, 25);
assert!(res.mod_five);
println!("\nAll tests passed successfully!");
}