/**
 * @file src/exproriented.c
 */

/*
 * Usage
 * ----------------------------------------------------------------------------
 * if expression         | puts($if(lhs == rhs) "equal" $else "not equal");
 * ----------------------------------------------------------------------------
 * break expression      | p = next() ?: $break;
 * ----------------------------------------------------------------------------
 * continue expression   | is_validinput(input) ?: $continue;
 * ----------------------------------------------------------------------------
 * return expression     | char *homedir = getenv("HOME") ?: p$return(-1);
 * ----------------------------------------------------------------------------
 */

#include "exproriented.h"
#include "testing.h"

test (in_expr) {
  int i = 0;
  for (;;) {
    _ = $if(i == 1) 1 $else $break;
    expect(false);
  }
  for (i = 0; i < 5; i++) {
    _ = $continue;
    expect(false);
  }
}

test (in_statement) {
  for (;;) {
    $break;
    expect(false);
  }
  for (int i = 0; i < 5; i++) {
    $continue;
    expect(false);
  }
}

test (multi_statement) {
  int c = 0;
  int a = $if(!c)({
    int i = 1;
    i * 2;
  }) $else({
    int i = 5;
    (i + 1) * i;
  });
  expecteq(a, 2);
  a = $if(c)({
    int i = 9;
    i - 1;
  }) $else a;
  expecteq(a, 2);
  _ = a;
}

test (dollar_sign) {
  // $ expression returns 0.
  // For now.
  // unit type intention
  expecteq(0, $(int i = 5; _ = i;));
}