github_actions_expressions/
op.rs1#[derive(Debug, PartialEq)]
5pub enum BinOp {
6 And,
8 Or,
10 Eq,
12 Neq,
14 Gt,
16 Ge,
18 Lt,
20 Le,
22}
23
24#[derive(Debug, PartialEq)]
26pub enum UnOp {
27 Not,
29}
30
31#[cfg(test)]
32mod tests {
33 use crate::Expr;
34 use anyhow::Result;
35
36 #[test]
37 fn test_evaluate_constant_binary_operations() -> Result<()> {
38 use crate::Evaluation;
39
40 let test_cases = &[
41 ("true && true", Evaluation::Boolean(true)),
43 ("true && false", Evaluation::Boolean(false)),
44 ("false && true", Evaluation::Boolean(false)),
45 ("false && false", Evaluation::Boolean(false)),
46 ("true || true", Evaluation::Boolean(true)),
47 ("true || false", Evaluation::Boolean(true)),
48 ("false || true", Evaluation::Boolean(true)),
49 ("false || false", Evaluation::Boolean(false)),
50 ("1 == 1", Evaluation::Boolean(true)),
52 ("1 == 2", Evaluation::Boolean(false)),
53 ("'hello' == 'hello'", Evaluation::Boolean(true)),
54 ("'hello' == 'world'", Evaluation::Boolean(false)),
55 ("true == true", Evaluation::Boolean(true)),
56 ("true == false", Evaluation::Boolean(false)),
57 ("1 != 2", Evaluation::Boolean(true)),
58 ("1 != 1", Evaluation::Boolean(false)),
59 ("1 < 2", Evaluation::Boolean(true)),
61 ("2 < 1", Evaluation::Boolean(false)),
62 ("1 <= 1", Evaluation::Boolean(true)),
63 ("1 <= 2", Evaluation::Boolean(true)),
64 ("2 <= 1", Evaluation::Boolean(false)),
65 ("2 > 1", Evaluation::Boolean(true)),
66 ("1 > 2", Evaluation::Boolean(false)),
67 ("1 >= 1", Evaluation::Boolean(true)),
68 ("2 >= 1", Evaluation::Boolean(true)),
69 ("1 >= 2", Evaluation::Boolean(false)),
70 ];
71
72 for (expr_str, expected) in test_cases {
73 let expr = Expr::parse(expr_str)?;
74 let result = expr.consteval().unwrap();
75 assert_eq!(result, *expected, "Failed for expression: {}", expr_str);
76 }
77
78 Ok(())
79 }
80}