Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions crates/bevy_reflect/src/enums/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ pub fn enum_partial_cmp<TEnum: Enum + ?Sized>(

// Same variant name?
if a.variant_name() != b.variant_name() {
// Different variant names, determining ordering by variant index
return Some(a.variant_index().cmp(&b.variant_index()));
// Different variant names, cannot compare
return None;
}

// Same variant type?
Expand Down
35 changes: 10 additions & 25 deletions crates/bevy_reflect/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1691,19 +1691,10 @@ mod tests {
let b = MyEnum::Center;
let c = MyEnum::Bottom;

// Variant ordering should follow variant index
assert_eq!(
PartialReflect::reflect_partial_cmp(&a, &b),
Some(Ordering::Less)
);
assert_eq!(
PartialReflect::reflect_partial_cmp(&b, &a),
Some(Ordering::Greater)
);
assert_eq!(
PartialReflect::reflect_partial_cmp(&b, &c),
Some(Ordering::Less)
);
// Variant ordering of different variant name cannot be compared.
assert_eq!(PartialReflect::reflect_partial_cmp(&a, &b), None);
assert_eq!(PartialReflect::reflect_partial_cmp(&b, &a), None);
assert_eq!(PartialReflect::reflect_partial_cmp(&b, &c), None);
assert_eq!(
PartialReflect::reflect_partial_cmp(&a, &a),
Some(Ordering::Equal)
Expand All @@ -1713,23 +1704,17 @@ mod tests {
enum MyEnum2 {
A,
B,
C,
Center,
}
let a1 = MyEnum2::A;
let c1 = MyEnum2::C;
let c1 = MyEnum2::Center;

// Unfortunately, it means that enums that have different types can also be compared
assert_eq!(
PartialReflect::reflect_partial_cmp(&a1, &a),
Some(Ordering::Equal)
);
assert_eq!(
PartialReflect::reflect_partial_cmp(&a1, &b),
Some(Ordering::Less)
);
assert_eq!(PartialReflect::reflect_partial_cmp(&a1, &a), None);
assert_eq!(PartialReflect::reflect_partial_cmp(&a1, &b), None);
// Variant name same, even different type, should be comparable
assert_eq!(
PartialReflect::reflect_partial_cmp(&c1, &b),
Some(Ordering::Greater)
Some(Ordering::Equal)
);
}

Expand Down