iter 23.2.3: prelude — class Eq a + Eq Int/Bool/Str instances
This commit is contained in:
@@ -920,6 +920,42 @@ mod tests {
|
||||
)),
|
||||
"prelude must contain Ordering type def"
|
||||
);
|
||||
|
||||
// Iter 23.2: prelude also ships the `Eq` class plus three
|
||||
// primitive instances (Eq Int, Eq Bool, Eq Str).
|
||||
assert!(
|
||||
prelude.defs.iter().any(|d| matches!(
|
||||
d,
|
||||
crate::ast::Def::Class(c) if c.name == "Eq"
|
||||
)),
|
||||
"prelude must contain Eq class def"
|
||||
);
|
||||
let eq_instance_types: Vec<&str> = prelude
|
||||
.defs
|
||||
.iter()
|
||||
.filter_map(|d| match d {
|
||||
crate::ast::Def::Instance(i) if i.class == "Eq" => {
|
||||
if let crate::ast::Type::Con { name, .. } = &i.type_ {
|
||||
Some(name.as_str())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
})
|
||||
.collect();
|
||||
assert!(
|
||||
eq_instance_types.contains(&"Int"),
|
||||
"prelude must contain `instance Eq Int`; saw Eq instances on: {eq_instance_types:?}"
|
||||
);
|
||||
assert!(
|
||||
eq_instance_types.contains(&"Bool"),
|
||||
"prelude must contain `instance Eq Bool`; saw Eq instances on: {eq_instance_types:?}"
|
||||
);
|
||||
assert!(
|
||||
eq_instance_types.contains(&"Str"),
|
||||
"prelude must contain `instance Eq Str`; saw Eq instances on: {eq_instance_types:?}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user