in arrow-schema/src/datatype.rs [658:812]
fn test_list_datatype_equality() {
// tests that list type equality is checked while ignoring list names
let list_a = DataType::List(Arc::new(Field::new("item", DataType::Int32, true)));
let list_b = DataType::List(Arc::new(Field::new("array", DataType::Int32, true)));
let list_c = DataType::List(Arc::new(Field::new("item", DataType::Int32, false)));
let list_d = DataType::List(Arc::new(Field::new("item", DataType::UInt32, true)));
assert!(list_a.equals_datatype(&list_b));
assert!(!list_a.equals_datatype(&list_c));
assert!(!list_b.equals_datatype(&list_c));
assert!(!list_a.equals_datatype(&list_d));
let list_e = DataType::FixedSizeList(
Arc::new(Field::new("item", list_a.clone(), false)),
3,
);
let list_f = DataType::FixedSizeList(
Arc::new(Field::new("array", list_b.clone(), false)),
3,
);
let list_g = DataType::FixedSizeList(
Arc::new(Field::new("item", DataType::FixedSizeBinary(3), true)),
3,
);
assert!(list_e.equals_datatype(&list_f));
assert!(!list_e.equals_datatype(&list_g));
assert!(!list_f.equals_datatype(&list_g));
let list_h = DataType::Struct(Fields::from(vec![Field::new("f1", list_e, true)]));
let list_i =
DataType::Struct(Fields::from(vec![Field::new("f1", list_f.clone(), true)]));
let list_j =
DataType::Struct(Fields::from(vec![Field::new("f1", list_f.clone(), false)]));
let list_k = DataType::Struct(Fields::from(vec![
Field::new("f1", list_f.clone(), false),
Field::new("f2", list_g.clone(), false),
Field::new("f3", DataType::Utf8, true),
]));
let list_l = DataType::Struct(Fields::from(vec![
Field::new("ff1", list_f.clone(), false),
Field::new("ff2", list_g.clone(), false),
Field::new("ff3", DataType::LargeUtf8, true),
]));
let list_m = DataType::Struct(Fields::from(vec![
Field::new("ff1", list_f, false),
Field::new("ff2", list_g, false),
Field::new("ff3", DataType::Utf8, true),
]));
assert!(list_h.equals_datatype(&list_i));
assert!(!list_h.equals_datatype(&list_j));
assert!(!list_k.equals_datatype(&list_l));
assert!(list_k.equals_datatype(&list_m));
let list_n =
DataType::Map(Arc::new(Field::new("f1", list_a.clone(), true)), true);
let list_o =
DataType::Map(Arc::new(Field::new("f2", list_b.clone(), true)), true);
let list_p =
DataType::Map(Arc::new(Field::new("f2", list_b.clone(), true)), false);
let list_q =
DataType::Map(Arc::new(Field::new("f2", list_c.clone(), true)), true);
let list_r =
DataType::Map(Arc::new(Field::new("f1", list_a.clone(), false)), true);
assert!(list_n.equals_datatype(&list_o));
assert!(!list_n.equals_datatype(&list_p));
assert!(!list_n.equals_datatype(&list_q));
assert!(!list_n.equals_datatype(&list_r));
let list_s = DataType::Dictionary(Box::new(DataType::UInt8), Box::new(list_a));
let list_t =
DataType::Dictionary(Box::new(DataType::UInt8), Box::new(list_b.clone()));
let list_u = DataType::Dictionary(Box::new(DataType::Int8), Box::new(list_b));
let list_v = DataType::Dictionary(Box::new(DataType::UInt8), Box::new(list_c));
assert!(list_s.equals_datatype(&list_t));
assert!(!list_s.equals_datatype(&list_u));
assert!(!list_s.equals_datatype(&list_v));
let union_a = DataType::Union(
UnionFields::new(
vec![1, 2],
vec![
Field::new("f1", DataType::Utf8, false),
Field::new("f2", DataType::UInt8, false),
],
),
UnionMode::Sparse,
);
let union_b = DataType::Union(
UnionFields::new(
vec![1, 2],
vec![
Field::new("ff1", DataType::Utf8, false),
Field::new("ff2", DataType::UInt8, false),
],
),
UnionMode::Sparse,
);
let union_c = DataType::Union(
UnionFields::new(
vec![2, 1],
vec![
Field::new("fff2", DataType::UInt8, false),
Field::new("fff1", DataType::Utf8, false),
],
),
UnionMode::Sparse,
);
let union_d = DataType::Union(
UnionFields::new(
vec![2, 1],
vec![
Field::new("fff1", DataType::Int8, false),
Field::new("fff2", DataType::UInt8, false),
],
),
UnionMode::Sparse,
);
let union_e = DataType::Union(
UnionFields::new(
vec![1, 2],
vec![
Field::new("f1", DataType::Utf8, true),
Field::new("f2", DataType::UInt8, false),
],
),
UnionMode::Sparse,
);
assert!(union_a.equals_datatype(&union_b));
assert!(union_a.equals_datatype(&union_c));
assert!(!union_a.equals_datatype(&union_d));
assert!(!union_a.equals_datatype(&union_e));
let list_w = DataType::RunEndEncoded(
Arc::new(Field::new("f1", DataType::Int64, true)),
Arc::new(Field::new("f2", DataType::Utf8, true)),
);
let list_x = DataType::RunEndEncoded(
Arc::new(Field::new("ff1", DataType::Int64, true)),
Arc::new(Field::new("ff2", DataType::Utf8, true)),
);
let list_y = DataType::RunEndEncoded(
Arc::new(Field::new("ff1", DataType::UInt16, true)),
Arc::new(Field::new("ff2", DataType::Utf8, true)),
);
let list_z = DataType::RunEndEncoded(
Arc::new(Field::new("f1", DataType::Int64, false)),
Arc::new(Field::new("f2", DataType::Utf8, true)),
);
assert!(list_w.equals_datatype(&list_x));
assert!(!list_w.equals_datatype(&list_y));
assert!(!list_w.equals_datatype(&list_z));
}