Basic Operations:
  - name: Unary Minus and Plus
    input:
      type: raw
      value: 'expr -3 + +5'
    output:
      type: raw
      value: '2'
  - name: Addition and Subtraction
    input:
      type: raw
      value: 'expr 3 + 5 - 2'
    output:
      type: raw
      value: '6'
  - name: Multiplication and Division
    input:
      type: raw
      value: 'expr 3 * 9 / 3'
    output:
      type: raw
      value: '9'
  - name: Divide by Zero
    input:
      type: raw
      value: 'expr 3 / 0'
    output:
      type: error
  - name: Exponentiation
    input:
      type: raw
      value: 'expr 2 ** 4'
    output:
      type: raw
      value: '16'
Relational Operations:
  Equals:
    - name: Fail
      input:
        type: raw
        value: 'expr 2 == 4'
      output:
        type: raw
        value: '0'
    - name: Success
      input:
        type: raw
        value: 'expr 4 == 4'
      output:
        type: raw
        value: '1'
    - name: Fail string
      input:
        type: raw
        value: 'expr 2 eq 4'
      output:
        type: raw
        value: '0'
    - name: Success string
      input:
        type: raw
        value: 'expr 4 eq 4'
      output:
        type: raw
        value: '1'
  Not Equals:
    - name: Fail
      input:
        type: raw
        value: 'expr 2 != 4'
      output:
        type: raw
        value: '1'
    - name: Success
      input:
        type: raw
        value: 'expr 4 != 4'
      output:
        type: raw
        value: '0'
    - name: Fail string
      input:
        type: raw
        value: 'expr 2 ne 4'
      output:
        type: raw
        value: '1'
    - name: Success string
      input:
        type: raw
        value: 'expr 4 ne 4'
      output:
        type: raw
        value: '0'
  Greater and Smaller than:
    - name: Greater
      input:
        type: raw
        value: 'expr 2 > 4'
      output:
        type: raw
        value: '0'
    - name: Smaller
      input:
        type: raw
        value: 'expr 2 < 4'
      output:
        type: raw
        value: '1'
  Greater and Smaller than or Equals:
    - name: Greater
      input:
        type: raw
        value: 'expr 2 >= 4'
      output:
        type: raw
        value: '0'
    - name: Smaller
      input:
        type: raw
        value: 'expr 2 <= 4'
      output:
        type: raw
        value: '1'
    - name: Greater Equals
      input:
        type: raw
        value: 'expr 4 >= 4'
      output:
        type: raw
        value: '1'
    - name: Smaller Equals
      input:
        type: raw
        value: 'expr 4 <= 4'
      output:
        type: raw
        value: '1'
Integer Operations:
  - name: Bitwise NOT
    input:
      type: raw
      value: 'expr ~4'
    output:
      type: raw
      value: '-5'
  - name: Logical NOT
    input:
      type: raw
      value: 'expr !1'
    output:
      type: raw
      value: '0'
  - name: Remainder
    input:
      type: raw
      value: 'expr 5 % 3'
    output:
      type: raw
      value: '2'
  - name: Left bit shift
    input:
      type: raw
      value: 'expr 2 << 2'
    output:
      type: raw
      value: '8'
  - name: Right bit shift
    input:
      type: raw
      value: 'expr 8 >> 2'
    output:
      type: raw
      value: '2'
  - name: Bitwise AND
    input:
      type: raw
      value: 'expr 28 & 7'
    output:
      type: raw
      value: '4'
  - name: Bitwise exlusive OR
    input:
      type: raw
      value: 'expr 28 ^ 7'
    output:
      type: raw
      value: '27'
  - name: Bitwise OR
    input:
      type: raw
      value: 'expr 28 | 7'
    output:
      type: raw
      value: '31'
Logical Operations:
  - name: AND true
    input:
      type: raw
      value: 'expr true && true'
    output:
      type: raw
      value: '1'
  - name: AND false
    input:
      type: raw
      value: 'expr true && false'
    output:
      type: raw
      value: '0'
  - name: OR true
    input:
      type: raw
      value: 'expr true || false'
    output:
      type: raw
      value: '1'
  - name: OR false
    input:
      type: raw
      value: 'expr false || false'
    output:
      type: raw
      value: '0'
  - name: If statement
    input:
      type: raw
      value: 'expr {3 == 3 ? 2 : 1}'
    output:
      type: raw
      value: '2'
Strings:
  - name: Equal
    input:
      type: raw
      value: 'expr {"test" == "test"}'
    output:
      type: raw
      value: '1'
  - name: Not Equal
    input:
      type: raw
      value: 'expr {"jup" != "test"}'
    output:
      type: raw
      value: '1'
  - name: Greater than
    input:
      type: raw
      value: 'expr {"z" > "a"}'
    output:
      type: raw
      value: '1'
  - name: Smaller than
    input:
      type: raw
      value: 'expr {"Z" < "a"}'
    output:
      type: raw
      value: '1'
Braces:
  - name: Simple
    input:
      type: raw
      value: 'expr {4 * (4 / 2)}'
    output:
      type: raw
      value: '8'
  - name: Nested
    input:
      type: raw
      value: 'expr {4 * ((sqrt(16) + 2) / 2)}'
    output:
      type: raw
      value: '12'
  - name: Nested with if
    input:
      type: raw
      value: 'expr {(4 * ((sqrt(16) + 2) / 2)) == 12 ? 8 : 2}'
    output:
      type: raw
      value: '8'
Advanced:
  - name: fmod
    input:
      type: raw
      value: 'expr {fmod(10, 3)}'
    output:
      type: raw
      value: '1'
  - name: bool true
    input:
      type: raw
      value: 'expr {bool(10)}'
    output:
      type: raw
      value: '1'
  - name: bool false
    input:
      type: raw
      value: 'expr {bool(0)}'
    output:
      type: raw
      value: '0'
  - name: double
    input:
      type: raw
      value: 'expr {double(10)}'
    output:
      type: raw
      value: '10'
  - name: entier
    input:
      type: raw
      value: 'expr {entier(10)}'
    output:
      type: raw
      value: '10'
  - name: wide
    input:
      type: raw
      value: 'expr {wide(10)}'
    output:
      type: raw
      value: '10'
  - name: int
    input:
      type: raw
      value: 'expr {int(10 / 3)}'
    output:
      type: raw
      value: '3'
  - name: isqrt
    input:
      type: raw
      value: 'expr {isqrt(13)}'
    output:
      type: raw
      value: '3'
  - name: isqrt
    input:
      type: raw
      value: 'expr {srand(3) * 0 + 1}'
      # Yes i do realize what i have put here
    output:
      type: raw
      value: '1'
