use super::*;
#[test]
fn test_compute_order_column_major() {
let dims = [4usize, 5];
let strides = [1isize, 4];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, Some(0));
assert_eq!(order[0], 0);
assert_eq!(order[1], 1);
}
#[test]
fn test_compute_order_row_major() {
let dims = [4usize, 5];
let strides = [5isize, 1];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, Some(0));
assert_eq!(order[0], 1);
assert_eq!(order[1], 0);
}
#[test]
fn test_compute_order_mixed() {
let dims = [4usize, 5];
let out_strides = [1isize, 4];
let in_strides = [5isize, 1];
let strides_list: Vec<&[isize]> = vec![&out_strides, &in_strides];
let order = compute_order(&dims, &strides_list, Some(0));
assert_eq!(order[0], 0);
assert_eq!(order[1], 1);
}
#[test]
fn test_compute_order_empty() {
let dims: [usize; 0] = [];
let strides: [isize; 0] = [];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, Some(0));
assert!(order.is_empty());
}
#[test]
fn test_compute_order_dest_reorder() {
let dims = [4usize, 5];
let src_strides = [1isize, 4]; let dst_strides = [5isize, 1]; let strides_list: Vec<&[isize]> = vec![&src_strides, &dst_strides];
let order = compute_order(&dims, &strides_list, Some(1));
assert_eq!(order.len(), 2);
}
#[test]
fn test_compute_order_no_dest() {
let dims = [4usize, 5];
let strides = [1isize, 4];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, None);
assert_eq!(order.len(), 2);
}
#[test]
fn test_compute_order_dest_out_of_bounds() {
let dims = [4usize, 5];
let strides = [1isize, 4];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, Some(5));
assert_eq!(order.len(), 2);
}
#[test]
fn test_compute_order_empty_strides_list() {
let dims = [4usize, 5, 6];
let strides_list: Vec<&[isize]> = vec![];
let order = compute_order(&dims, &strides_list, None);
assert_eq!(order, vec![0, 1, 2]);
}
#[test]
fn test_compute_order_3d() {
let dims = [4usize, 5, 6];
let strides = [1isize, 4, 20];
let strides_list: Vec<&[isize]> = vec![&strides];
let order = compute_order(&dims, &strides_list, Some(0));
assert_eq!(order.len(), 3);
assert_eq!(order[0], 0);
}