#[cfg(test)]
mod unique_tests {
use numrs2::prelude::*;
#[test]
fn test_unique_basic() {
let a = Array::from_vec(vec![1, 2, 3, 2, 1, 4]).reshape(&[6]);
let result = unique(&a, None, None, None, None).unwrap();
assert_eq!(result.values.to_vec(), vec![1, 2, 3, 4]);
let result = unique(&a, None, Some(true), None, None).unwrap();
let (values, indices) = result.values_indices().unwrap();
assert_eq!(values.to_vec(), vec![1, 2, 3, 4]);
assert_eq!(indices.to_vec(), vec![0, 1, 2, 5]);
let result = unique(&a, None, None, None, Some(true)).unwrap();
let (values, counts) = result.values_counts().unwrap();
assert_eq!(values.to_vec(), vec![1, 2, 3, 4]);
assert_eq!(counts.to_vec(), vec![2, 2, 1, 1]);
let result = unique(&a, None, None, Some(true), None).unwrap();
let (values, inverse) = result.values_inverse().unwrap();
assert_eq!(values.to_vec(), vec![1, 2, 3, 4]);
assert_eq!(inverse.to_vec(), vec![0, 1, 2, 1, 0, 3]);
let mut reconstructed = Vec::with_capacity(a.size());
let values_vec = values.to_vec();
for &idx in &inverse.to_vec() {
reconstructed.push(values_vec[idx]);
}
assert_eq!(reconstructed, a.to_vec());
}
#[test]
fn test_unique_2d_array() {
let a = Array::from_vec(vec![1, 2, 3, 1, 2, 3, 7, 8, 9]).reshape(&[3, 3]);
let result = unique(&a, Some(0), None, None, None).unwrap();
assert_eq!(result.values.shape(), vec![2, 3]);
let result = unique(&a, Some(0), Some(true), None, None).unwrap();
let (_values, indices) = result.values_indices().unwrap();
assert_eq!(indices.to_vec(), vec![0, 2]);
let result = unique(&a, Some(0), None, None, Some(true)).unwrap();
let (_values, counts) = result.values_counts().unwrap();
assert_eq!(counts.to_vec(), vec![2, 1]); }
#[test]
fn test_unique_edge_cases() {
let empty = Array::<i32>::from_vec(vec![]).reshape(&[0]);
let result = unique(&empty, None, None, None, None).unwrap();
let empty_vec: Vec<i32> = vec![];
assert_eq!(result.values.to_vec(), empty_vec);
let single = Array::from_vec(vec![5]);
let result = unique(&single, None, None, None, None).unwrap();
assert_eq!(result.values.to_vec(), vec![5]);
let all_same = Array::from_vec(vec![7, 7, 7, 7]);
let result = unique(&all_same, None, None, None, None).unwrap();
assert_eq!(result.values.to_vec(), vec![7]);
let a = Array::from_vec(vec![3, 1, 2, 1, 3]);
let result = unique(&a, None, Some(true), Some(true), Some(true)).unwrap();
let (values, indices, inverse, counts) = result.values_indices_inverse_counts().unwrap();
assert_eq!(values.to_vec(), vec![3, 1, 2]);
assert_eq!(indices.to_vec(), vec![0, 1, 2]);
assert_eq!(inverse.to_vec(), vec![0, 1, 2, 1, 0]);
assert_eq!(counts.to_vec(), vec![2, 2, 1]);
}
}