use ferray_core::dimension::{Dimension, Ix1};
use ferray_core::error::FerrayResult;
use crate::string_array::{StringArray, StringArray1};
pub fn split<D: Dimension>(a: &StringArray<D>, sep: &str) -> FerrayResult<Vec<Vec<String>>> {
let result: Vec<Vec<String>> = a
.iter()
.map(|s| s.split(sep).map(String::from).collect())
.collect();
Ok(result)
}
pub fn join(sep: &str, items: &[Vec<String>]) -> FerrayResult<StringArray1> {
let data: Vec<String> = items.iter().map(|parts| parts.join(sep)).collect();
let dim = Ix1::new([data.len()]);
StringArray1::from_vec(dim, data)
}
pub fn join_array<D: Dimension>(sep: &str, a: &StringArray<D>) -> FerrayResult<StringArray1> {
let joined: String = a
.iter()
.map(|s| s.as_str())
.collect::<Vec<&str>>()
.join(sep);
let dim = Ix1::new([1]);
StringArray1::from_vec(dim, vec![joined])
}
#[cfg(test)]
mod tests {
use super::*;
use crate::string_array::array;
#[test]
fn test_split() {
let a = array(&["a-b", "c-d"]).unwrap();
let result = split(&a, "-").unwrap();
assert_eq!(result.len(), 2);
assert_eq!(result[0], vec!["a", "b"]);
assert_eq!(result[1], vec!["c", "d"]);
}
#[test]
fn test_split_multiple_parts() {
let a = array(&["a-b-c"]).unwrap();
let result = split(&a, "-").unwrap();
assert_eq!(result[0], vec!["a", "b", "c"]);
}
#[test]
fn test_split_no_separator_found() {
let a = array(&["hello"]).unwrap();
let result = split(&a, "-").unwrap();
assert_eq!(result[0], vec!["hello"]);
}
#[test]
fn test_join() {
let items = vec![
vec!["a".to_string(), "b".to_string()],
vec!["c".to_string(), "d".to_string()],
];
let result = join("-", &items).unwrap();
assert_eq!(result.as_slice(), &["a-b", "c-d"]);
}
#[test]
fn test_join_array() {
let a = array(&["hello", "world"]).unwrap();
let result = join_array(" ", &a).unwrap();
assert_eq!(result.as_slice(), &["hello world"]);
}
#[test]
fn test_split_ac4() {
let a = array(&["a-b", "c-d"]).unwrap();
let result = split(&a, "-").unwrap();
assert_eq!(
result,
vec![
vec!["a".to_string(), "b".to_string()],
vec!["c".to_string(), "d".to_string()],
]
);
}
}