use super::super::*;

#[test]
fn _0001() {
  let scope = scope!();
  accept(
    &scope,
    StartExpression,
    r#"some n in [1,2,3] satisfies n > 1.5"#,
    r#"
       Some
       ├─ QuantifiedContexts
       │  └─ QuantifiedContext
       │     ├─ Name
       │     │  └─ `n`
       │     └─ List
       │        ├─ Numeric
       │        │  └─ `1`
       │        ├─ Numeric
       │        │  └─ `2`
       │        └─ Numeric
       │           └─ `3`
       └─ Satisfies
          └─ Gt
             ├─ Name
             │  └─ `n`
             └─ Numeric
                └─ `1.5`
    "#,
    false,
  );
}

#[test]
fn _0002() {
  let scope = scope!();
  accept(
    &scope,
    StartExpression,
    r#"some n in [1,2,3] satisfies n + 1 > 1.5"#,
    r#"
       Some
       ├─ QuantifiedContexts
       │  └─ QuantifiedContext
       │     ├─ Name
       │     │  └─ `n`
       │     └─ List
       │        ├─ Numeric
       │        │  └─ `1`
       │        ├─ Numeric
       │        │  └─ `2`
       │        └─ Numeric
       │           └─ `3`
       └─ Satisfies
          └─ Gt
             ├─ Add
             │  ├─ Name
             │  │  └─ `n`
             │  └─ Numeric
             │     └─ `1`
             └─ Numeric
                └─ `1.5`
    "#,
    false,
  );
}

#[test]
fn _0003() {
  let scope = scope!();
  accept(
    &scope,
    StartExpression,
    r#"some n in [1,2,3], m in <= 100 satisfies n > 1.5 * m"#,
    r#"
       Some
       ├─ QuantifiedContexts
       │  ├─ QuantifiedContext
       │  │  ├─ Name
       │  │  │  └─ `n`
       │  │  └─ List
       │  │     ├─ Numeric
       │  │     │  └─ `1`
       │  │     ├─ Numeric
       │  │     │  └─ `2`
       │  │     └─ Numeric
       │  │        └─ `3`
       │  └─ QuantifiedContext
       │     ├─ Name
       │     │  └─ `m`
       │     └─ UnaryLe
       │        └─ Numeric
       │           └─ `100`
       └─ Satisfies
          └─ Gt
             ├─ Name
             │  └─ `n`
             └─ Mul
                ├─ Numeric
                │  └─ `1.5`
                └─ Name
                   └─ `m`
    "#,
    false,
  );
}

#[test]
fn _0004() {
  let scope = scope!();
  accept(
    &scope,
    StartExpression,
    r#"some n in [1..3] satisfies n > 1.5"#,
    r#"
       Some
       ├─ QuantifiedContexts
       │  └─ QuantifiedContext
       │     ├─ Name
       │     │  └─ `n`
       │     └─ Range
       │        ├─ IntervalStart (closed)
       │        │  └─ Numeric
       │        │     └─ `1`
       │        └─ IntervalEnd (closed)
       │           └─ Numeric
       │              └─ `3`
       └─ Satisfies
          └─ Gt
             ├─ Name
             │  └─ `n`
             └─ Numeric
                └─ `1.5`
    "#,
    false,
  );
}
