use matten::Tensor;
fn main() {
let a = Tensor::new(vec![1.0, 2.0, 3.0, 4.0], &[2, 2]);
let b = Tensor::new(vec![5.0, 6.0, 7.0, 8.0], &[2, 2]);
let cat0 = Tensor::concatenate(&[&a, &b], 0);
println!("concatenate axis 0 -> shape {:?}", cat0.shape());
assert_eq!(cat0.shape(), &[4, 2]);
let cat1 = Tensor::concatenate(&[&a, &b], 1);
println!("concatenate axis 1 -> shape {:?}", cat1.shape());
assert_eq!(cat1.shape(), &[2, 4]);
let st0 = Tensor::stack(&[&a, &b], 0);
println!("stack axis 0 -> shape {:?}", st0.shape());
assert_eq!(st0.shape(), &[2, 2, 2]);
let st2 = Tensor::stack(&[&a, &b], 2);
println!("stack axis 2 -> shape {:?}", st2.shape());
assert_eq!(st2.shape(), &[2, 2, 2]);
assert_eq!(st2.as_slice(), &[1.0, 5.0, 2.0, 6.0, 3.0, 7.0, 4.0, 8.0]);
let v = Tensor::from_vec(vec![1.0, 2.0]);
assert!(Tensor::try_concatenate(&[&a, &v], 0).is_err());
println!("Concatenate/stack: OK");
}