Skip to content

Commit a21cba0

Browse files
committed
MINOR: add unit tests for chr function
Signed-off-by: Ruihang Xia <[email protected]>
1 parent a0ce581 commit a21cba0

File tree

1 file changed

+67
-0
lines changed
  • datafusion/functions/src/string

1 file changed

+67
-0
lines changed

datafusion/functions/src/string/chr.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,70 @@ impl ScalarUDFImpl for ChrFunc {
132132
self.doc()
133133
}
134134
}
135+
136+
#[cfg(test)]
137+
mod tests {
138+
use super::*;
139+
use arrow::array::{Array, Int64Array, StringArray};
140+
use datafusion_common::assert_contains;
141+
142+
#[test]
143+
fn test_chr_normal() {
144+
let input = Arc::new(Int64Array::from(vec![
145+
Some(65), // A
146+
Some(66), // B
147+
Some(67), // C
148+
Some(128640), // 🚀
149+
Some(8364), // €
150+
Some(945), // α
151+
None, // NULL
152+
Some(32), // space
153+
Some(10), // newline
154+
Some(9), // tab
155+
]));
156+
let result = chr(&[input]).unwrap();
157+
let string_array = result.as_any().downcast_ref::<StringArray>().unwrap();
158+
let expected = vec!["A", "B", "C", "🚀", "€", "α", "", " ", "\n", "\t"];
159+
160+
assert_eq!(string_array.len(), 10);
161+
for i in 0..string_array.len() {
162+
assert_eq!(string_array.value(i), expected[i]);
163+
}
164+
}
165+
166+
#[test]
167+
fn test_chr_error() {
168+
// chr(0) returns an error
169+
let input = Arc::new(Int64Array::from(vec![0]));
170+
let result = chr(&[input]);
171+
assert!(result.is_err());
172+
assert_contains!(
173+
result.err().unwrap().to_string(),
174+
"null character not permitted"
175+
);
176+
177+
// invalid Unicode code points (too large)
178+
let input = Arc::new(Int64Array::from(vec![i64::MAX]));
179+
let result = chr(&[input]);
180+
assert!(result.is_err());
181+
assert_contains!(
182+
result.err().unwrap().to_string(),
183+
"requested character too large for encoding"
184+
);
185+
186+
// one error with valid values after
187+
let input = Arc::new(Int64Array::from(vec![65, 0, 66])); // A, NULL_CHAR, B
188+
let result = chr(&[input]);
189+
assert!(result.is_err());
190+
assert_contains!(
191+
result.err().unwrap().to_string(),
192+
"null character not permitted"
193+
);
194+
195+
// empty input array
196+
let input = Arc::new(Int64Array::from(Vec::<i64>::new()));
197+
let result = chr(&[input]).unwrap();
198+
let string_array = result.as_any().downcast_ref::<StringArray>().unwrap();
199+
assert_eq!(string_array.len(), 0);
200+
}
201+
}

0 commit comments

Comments
 (0)