#![cfg(any(
not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)),
feature = "codegen_tests",
))]
use windjammer::codegen::rust::operators::{binary_op_to_rust, op_precedence, unary_op_to_rust};
use windjammer::parser::{BinaryOp, UnaryOp};
#[cfg(test)]
mod binary_operator_tests {
use super::*;
#[test]
fn test_arithmetic_operators() {
assert_eq!(binary_op_to_rust(&BinaryOp::Add), "+");
assert_eq!(binary_op_to_rust(&BinaryOp::Sub), "-");
assert_eq!(binary_op_to_rust(&BinaryOp::Mul), "*");
assert_eq!(binary_op_to_rust(&BinaryOp::Div), "/");
assert_eq!(binary_op_to_rust(&BinaryOp::Mod), "%");
}
#[test]
fn test_comparison_operators() {
assert_eq!(binary_op_to_rust(&BinaryOp::Eq), "==");
assert_eq!(binary_op_to_rust(&BinaryOp::Ne), "!=");
assert_eq!(binary_op_to_rust(&BinaryOp::Lt), "<");
assert_eq!(binary_op_to_rust(&BinaryOp::Le), "<=");
assert_eq!(binary_op_to_rust(&BinaryOp::Gt), ">");
assert_eq!(binary_op_to_rust(&BinaryOp::Ge), ">=");
}
#[test]
fn test_logical_operators() {
assert_eq!(binary_op_to_rust(&BinaryOp::And), "&&");
assert_eq!(binary_op_to_rust(&BinaryOp::Or), "||");
}
#[test]
fn test_bitwise_operators() {
assert_eq!(binary_op_to_rust(&BinaryOp::BitAnd), "&");
assert_eq!(binary_op_to_rust(&BinaryOp::BitOr), "|");
assert_eq!(binary_op_to_rust(&BinaryOp::BitXor), "^");
assert_eq!(binary_op_to_rust(&BinaryOp::Shl), "<<");
assert_eq!(binary_op_to_rust(&BinaryOp::Shr), ">>");
}
}
#[cfg(test)]
mod unary_operator_tests {
use super::*;
#[test]
fn test_logical_not() {
assert_eq!(unary_op_to_rust(&UnaryOp::Not), "!");
}
#[test]
fn test_negation() {
assert_eq!(unary_op_to_rust(&UnaryOp::Neg), "-");
}
#[test]
fn test_reference_operators() {
assert_eq!(unary_op_to_rust(&UnaryOp::Ref), "&");
assert_eq!(unary_op_to_rust(&UnaryOp::MutRef), "&mut ");
}
#[test]
fn test_dereference() {
assert_eq!(unary_op_to_rust(&UnaryOp::Deref), "*");
}
}
#[cfg(test)]
mod operator_precedence_tests {
use super::*;
#[test]
fn test_precedence_level_1_logical_or() {
assert_eq!(op_precedence(&BinaryOp::Or), 1);
}
#[test]
fn test_precedence_level_2_logical_and() {
assert_eq!(op_precedence(&BinaryOp::And), 2);
}
#[test]
fn test_precedence_level_3_bitwise_or() {
assert_eq!(op_precedence(&BinaryOp::BitOr), 3);
}
#[test]
fn test_precedence_level_4_bitwise_xor() {
assert_eq!(op_precedence(&BinaryOp::BitXor), 4);
}
#[test]
fn test_precedence_level_5_bitwise_and() {
assert_eq!(op_precedence(&BinaryOp::BitAnd), 5);
}
#[test]
fn test_precedence_level_6_equality() {
assert_eq!(op_precedence(&BinaryOp::Eq), 6);
assert_eq!(op_precedence(&BinaryOp::Ne), 6);
}
#[test]
fn test_precedence_level_7_comparison() {
assert_eq!(op_precedence(&BinaryOp::Lt), 7);
assert_eq!(op_precedence(&BinaryOp::Le), 7);
assert_eq!(op_precedence(&BinaryOp::Gt), 7);
assert_eq!(op_precedence(&BinaryOp::Ge), 7);
}
#[test]
fn test_precedence_level_8_bitshift() {
assert_eq!(op_precedence(&BinaryOp::Shl), 8);
assert_eq!(op_precedence(&BinaryOp::Shr), 8);
}
#[test]
fn test_precedence_level_9_additive() {
assert_eq!(op_precedence(&BinaryOp::Add), 9);
assert_eq!(op_precedence(&BinaryOp::Sub), 9);
}
#[test]
fn test_precedence_level_10_multiplicative() {
assert_eq!(op_precedence(&BinaryOp::Mul), 10);
assert_eq!(op_precedence(&BinaryOp::Div), 10);
assert_eq!(op_precedence(&BinaryOp::Mod), 10);
}
#[test]
fn test_precedence_ordering() {
assert!(op_precedence(&BinaryOp::Mul) > op_precedence(&BinaryOp::Add));
assert!(op_precedence(&BinaryOp::Add) > op_precedence(&BinaryOp::Lt));
assert!(op_precedence(&BinaryOp::Lt) > op_precedence(&BinaryOp::And));
assert!(op_precedence(&BinaryOp::And) > op_precedence(&BinaryOp::Or));
}
}