use crate::core::Symbol;
#[derive(Debug, Clone, PartialEq)]
pub enum ExpressionClass {
Integer,
Rational,
UnivariatePolynomial {
var: Symbol,
degree: i64,
},
MultivariatePolynomial {
vars: Vec<Symbol>,
total_degree: i64,
},
RationalFunction,
Transcendental,
Symbolic,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_expression_class_eq() {
assert_eq!(ExpressionClass::Integer, ExpressionClass::Integer);
assert_eq!(ExpressionClass::Rational, ExpressionClass::Rational);
assert_ne!(ExpressionClass::Integer, ExpressionClass::Rational);
}
#[test]
fn test_expression_class_clone() {
let class = ExpressionClass::UnivariatePolynomial {
var: crate::symbol!(x),
degree: 3,
};
let cloned = class.clone();
assert_eq!(class, cloned);
}
#[test]
fn test_expression_class_debug() {
let class = ExpressionClass::Integer;
let debug_str = format!("{:?}", class);
assert!(debug_str.contains("Integer"));
}
}