use crate::decision_variable::{DecisionVariable, DecisionVariableMetadata, Kind, VariableID};
use crate::logical_memory::{LogicalMemoryProfile, LogicalMemoryVisitor, Path};
use std::mem::size_of;
impl LogicalMemoryProfile for VariableID {
fn visit_logical_memory<V: LogicalMemoryVisitor>(&self, path: &mut Path, visitor: &mut V) {
visitor.visit_leaf(path, size_of::<VariableID>());
}
}
impl LogicalMemoryProfile for Kind {
fn visit_logical_memory<V: LogicalMemoryVisitor>(&self, path: &mut Path, visitor: &mut V) {
visitor.visit_leaf(path, size_of::<Kind>());
}
}
crate::impl_logical_memory_profile! {
DecisionVariable {
id,
kind,
bound,
substituted_value,
metadata,
}
}
crate::impl_logical_memory_profile! {
DecisionVariableMetadata {
name,
subscripts,
parameters,
description,
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::decision_variable::{Kind, VariableID};
use crate::logical_memory::logical_memory_to_folded;
use crate::{ATol, Bound};
#[test]
fn test_decision_variable_minimal_snapshot() {
let dv = DecisionVariable::binary(VariableID::from(1));
let folded = logical_memory_to_folded(&dv);
insta::assert_snapshot!(folded, @r###"
DecisionVariable.bound 16
DecisionVariable.id 8
DecisionVariable.kind 1
DecisionVariable.metadata;DecisionVariableMetadata.description;Option[stack] 24
DecisionVariable.metadata;DecisionVariableMetadata.name;Option[stack] 24
DecisionVariable.metadata;DecisionVariableMetadata.parameters;FnvHashMap[stack] 32
DecisionVariable.metadata;DecisionVariableMetadata.subscripts;Vec[stack] 24
DecisionVariable.substituted_value;Option[stack] 16
"###);
}
#[test]
fn test_decision_variable_with_metadata_snapshot() {
let mut dv = DecisionVariable::new(
VariableID::from(1),
Kind::Integer,
Bound::new(0.0, 10.0).unwrap(),
None,
ATol::default(),
)
.unwrap();
dv.metadata.name = Some("x1".to_string());
dv.metadata.description = Some("First variable".to_string());
dv.metadata.subscripts = vec![1, 2, 3];
let folded = logical_memory_to_folded(&dv);
insta::assert_snapshot!(folded, @r###"
DecisionVariable.bound 16
DecisionVariable.id 8
DecisionVariable.kind 1
DecisionVariable.metadata;DecisionVariableMetadata.description 38
DecisionVariable.metadata;DecisionVariableMetadata.name 26
DecisionVariable.metadata;DecisionVariableMetadata.parameters;FnvHashMap[stack] 32
DecisionVariable.metadata;DecisionVariableMetadata.subscripts 24
DecisionVariable.metadata;DecisionVariableMetadata.subscripts;Vec[stack] 24
DecisionVariable.substituted_value;Option[stack] 16
"###);
}
}