| 768 | |
| 769 | #[test] |
| 770 | fn test_try_new() { |
| 771 | let offsets = OffsetBuffer::new(vec![0, 1, 4, 5].into()); |
| 772 | let fields = Fields::from(vec![ |
| 773 | Field::new("key", DataType::Int32, false), |
| 774 | Field::new("values", DataType::Int32, false), |
| 775 | ]); |
| 776 | let columns = vec![ |
| 777 | Arc::new(Int32Array::from(vec![1, 2, 3, 4, 5])) as _, |
| 778 | Arc::new(Int32Array::from(vec![1, 2, 3, 4, 5])) as _, |
| 779 | ]; |
| 780 | |
| 781 | let entries = StructArray::new(fields.clone(), columns, None); |
| 782 | let field = Arc::new(Field::new("entries", DataType::Struct(fields), false)); |
| 783 | |
| 784 | MapArray::new(field.clone(), offsets.clone(), entries.clone(), None, false); |
| 785 | |
| 786 | let nulls = NullBuffer::new_null(3); |
| 787 | MapArray::new(field.clone(), offsets, entries.clone(), Some(nulls), false); |
| 788 | |
| 789 | let nulls = NullBuffer::new_null(3); |
| 790 | let offsets = OffsetBuffer::new(vec![0, 1, 2, 4, 5].into()); |
| 791 | let err = MapArray::try_new( |
| 792 | field.clone(), |
| 793 | offsets.clone(), |
| 794 | entries.clone(), |
| 795 | Some(nulls), |
| 796 | false, |
| 797 | ) |
| 798 | .unwrap_err(); |
| 799 | |
| 800 | assert_eq!( |
| 801 | err.to_string(), |
| 802 | "Invalid argument error: Incorrect length of null buffer for MapArray, expected 4 got 3" |
| 803 | ); |
| 804 | |
| 805 | let err = MapArray::try_new(field, offsets.clone(), entries.slice(0, 2), None, false) |
| 806 | .unwrap_err(); |
| 807 | |
| 808 | assert_eq!( |
| 809 | err.to_string(), |
| 810 | "Invalid argument error: Max offset of 5 exceeds length of entries 2" |
| 811 | ); |
| 812 | |
| 813 | let field = Arc::new(Field::new("element", DataType::Int64, false)); |
| 814 | let err = MapArray::try_new(field, offsets.clone(), entries, None, false) |
| 815 | .unwrap_err() |
| 816 | .to_string(); |
| 817 | |
| 818 | assert!( |
| 819 | err.starts_with("Invalid argument error: MapArray expected data type Int64 got Struct"), |
| 820 | "{err}" |
| 821 | ); |
| 822 | |
| 823 | let fields = Fields::from(vec![ |
| 824 | Field::new("a", DataType::Int32, false), |
| 825 | Field::new("b", DataType::Int32, false), |
| 826 | Field::new("c", DataType::Int32, false), |
| 827 | ]); |