dsntk-feel 0.0.6

Decision Toolkit | FEEL definitions
Documentation
use crate::values::Value;
use crate::{value_number, FeelScope, FunctionBody};
use std::sync::Arc;

#[test]
#[allow(clippy::redundant_clone)]
fn test_function_body_context() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Context(Arc::new(Box::new(|_: &FeelScope| value_number!(1))));
  assert_eq!(value_number!(1), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyContext", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Context(Arc::new(Box::new(|_: &FeelScope| value_number!(10))));
  assert_eq!(fun_body, fun_body_a);
  let fun_body_clone = fun_body.clone();
  assert_eq!(fun_body, fun_body_clone);
  assert_eq!(value_number!(1), fun_body_clone.evaluate(scope));
  assert_eq!("FunctionBodyContext", format!("{fun_body_clone:?}"))
}

#[test]
fn test_function_body_literal_expression() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::LiteralExpression(Arc::new(Box::new(|_: &FeelScope| value_number!(2))));
  assert_eq!(value_number!(2), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyLiteralExpression", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::LiteralExpression(Arc::new(Box::new(|_: &FeelScope| value_number!(20))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_decision_table() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::DecisionTable(Arc::new(Box::new(|_: &FeelScope| value_number!(3))));
  assert_eq!(value_number!(3), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyDecisionTable", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::DecisionTable(Arc::new(Box::new(|_: &FeelScope| value_number!(30))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_function_definition() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::FunctionDefinition(Arc::new(Box::new(|_: &FeelScope| value_number!(4))));
  assert_eq!(value_number!(4), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyFunctionDefinition", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::FunctionDefinition(Arc::new(Box::new(|_: &FeelScope| value_number!(40))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_invocation() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Invocation(Arc::new(Box::new(|_: &FeelScope| value_number!(5))));
  assert_eq!(value_number!(5), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyInvocation", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Invocation(Arc::new(Box::new(|_: &FeelScope| value_number!(50))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_relation() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Relation(Arc::new(Box::new(|_: &FeelScope| value_number!(6))));
  assert_eq!(value_number!(6), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyRelation", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Relation(Arc::new(Box::new(|_: &FeelScope| value_number!(60))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_decision_service() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::DecisionService(Arc::new(Box::new(|_: &FeelScope| value_number!(7))));
  assert_eq!(value_number!(7), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyDecisionService", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::DecisionService(Arc::new(Box::new(|_: &FeelScope| value_number!(70))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_external() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::External(Arc::new(Box::new(|_: &FeelScope| value_number!(8))));
  assert_eq!(value_number!(8), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyExternal", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::External(Arc::new(Box::new(|_: &FeelScope| value_number!(80))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_conditional() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Conditional(Arc::new(Box::new(|_: &FeelScope| value_number!(9))));
  assert_eq!(value_number!(9), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyConditional", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Conditional(Arc::new(Box::new(|_: &FeelScope| value_number!(90))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_every() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Every(Arc::new(Box::new(|_: &FeelScope| value_number!(10))));
  assert_eq!(value_number!(10), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyEvery", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Every(Arc::new(Box::new(|_: &FeelScope| value_number!(100))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_filter() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Filter(Arc::new(Box::new(|_: &FeelScope| value_number!(11))));
  assert_eq!(value_number!(11), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyFilter", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Filter(Arc::new(Box::new(|_: &FeelScope| value_number!(110))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_for() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::For(Arc::new(Box::new(|_: &FeelScope| value_number!(12))));
  assert_eq!(value_number!(12), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyFor", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::For(Arc::new(Box::new(|_: &FeelScope| value_number!(120))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_list() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::List(Arc::new(Box::new(|_: &FeelScope| value_number!(13))));
  assert_eq!(value_number!(13), fun_body.evaluate(scope));
  assert_eq!("FunctionBodyList", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::List(Arc::new(Box::new(|_: &FeelScope| value_number!(130))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}

#[test]
fn test_function_body_some() {
  let scope = &FeelScope::default();
  let fun_body = FunctionBody::Some(Arc::new(Box::new(|_: &FeelScope| value_number!(14))));
  assert_eq!(value_number!(14), fun_body.evaluate(scope));
  assert_eq!("FunctionBodySome", format!("{fun_body:?}"));
  let fun_body_a = FunctionBody::Some(Arc::new(Box::new(|_: &FeelScope| value_number!(140))));
  assert_eq!(fun_body, fun_body_a);
  assert_eq!(fun_body, fun_body.clone());
}