Make order of traits in emitted code deterministic.

This commit is contained in:
Alexander Meißner 2021-04-17 15:57:15 +02:00
parent b275827704
commit 62f230ff9a

View file

@ -65,13 +65,13 @@ fn main() {
emitter.emit(&AstNode::ClassDefinition { class }).unwrap(); emitter.emit(&AstNode::ClassDefinition { class }).unwrap();
} }
let involution_name = if generator_squares == vec![-1] { "Conjugate" } else { "Transpose" }; let involution_name = if generator_squares == vec![-1] { "Conjugate" } else { "Transpose" };
let mut trait_implementations = std::collections::HashMap::new(); let mut trait_implementations = std::collections::BTreeMap::new();
for class_a in registry.classes.iter() { for class_a in registry.classes.iter() {
let parameter_a = Parameter { let parameter_a = Parameter {
name: "self", name: "self",
data_type: DataType::MultiVector(class_a), data_type: DataType::MultiVector(class_a),
}; };
let mut single_trait_implementations = std::collections::HashMap::new(); let mut single_trait_implementations = std::collections::BTreeMap::new();
for name in &["Zero", "One"] { for name in &["Zero", "One"] {
let ast_node = class_a.constant(name); let ast_node = class_a.constant(name);
emitter.emit(&ast_node).unwrap(); emitter.emit(&ast_node).unwrap();
@ -86,9 +86,9 @@ fn main() {
single_trait_implementations.insert(name.to_string(), ast_node); single_trait_implementations.insert(name.to_string(), ast_node);
} }
} }
let mut pair_trait_implementations = std::collections::HashMap::new(); let mut pair_trait_implementations = std::collections::BTreeMap::new();
for class_b in registry.classes.iter() { for class_b in registry.classes.iter() {
let mut trait_implementations = std::collections::HashMap::new(); let mut trait_implementations = std::collections::BTreeMap::new();
let parameter_b = Parameter { let parameter_b = Parameter {
name: "other", name: "other",
data_type: DataType::MultiVector(class_b), data_type: DataType::MultiVector(class_b),