

body {
    color: 1 + 2 + 5;
    color: 1 + 2 * 5 + 5;
    height: 10px/10px;
    color: 10px/2 + 1;
    color: (10px/2);
    //bottom: (4/2px);
    top: 1em * (1 * 24px - 0) / 16px;
    left: 1 - 2cm;
    top: (2cm/12px);
}

div {
    color: 4 == 3;
    color: hello == hello;

    color: 4 > 3;
    color: 4 < 3;
}


#units {
    test: 1in + 4cm;
    test: 12mm + 1;
    test: 1 + 3em;
    test: 1mm + 1cm;
    test: 1cm + 1mm;
}

#modulo {
    test: 3 % 2;
    test: 4cm % 3;
}

#colors {
    color: #fff == 255;
    color: #fff != 255;
    color: 255 == #fff;
    color: 255 != #fff;

    color: #fff == #000;
    color: #fff == #fff;

    color: #fff != #000;
    color: #fff != #fff;
}


#preserve {
    hello: what -going;
    hello: what - going;
}

#strings {
    hello: what -going;

    hello: what +going;
    hello: what+going;
    hello: what+ going;
    hello: what + going;

    hello: "what" + going;
    hello: going + "what";
    hello: "what" + "what";
}

#negation {
    $num: 100;
    a: -$num + 40;
    b: 10 -$num;
    b: 10 - $num;
}

#bools-fail {
    and: false and two;
    and: one and two;
    and: one and false;

    or: false or two;
    or: one or two;
    or: one or false;
}

#bools {
    and: (false and two);
    and: (one and two);
    and: (one and false);
    and: (null and two);

    or: (false or two);
    or: (one or two);
    or: (one or false);
    or: (null or two);

    mixed_precedence: true or 128 < 0 and false;
}


#nots-fail {
    not: not true + 2;
    not: not false;
    not: not 0;
    not: not 1;
    not: not "";
    not: not hello;
}

#nots {
    not: (not true) + 2;
    not: (not false);
    not: (not 0);
    not: (not 1);
    not: (not "");
    not: (not hello);
    not: (not null);
}

#string-test {
    str: hi == "hi";
    str: hi == "no";
    str: 'yes' == 'yes';

    $var1: "hello";
    $var2: hello;

    str: "#{$var1}" == '#{$var2}';

    str: xhello#{$var1}x == "x#{$var2}hellox"; // xhellohellofalse

    str: unit(10px) == px;
}


#special {
  cancel-unit: (10px / 10px);
}

// not expecting unary
$form-spacing: 1em;

.row .a { margin: 0-$form-spacing / 2; }
.row .b { margin: 0- $form-spacing / 2; }
.row .c { margin: 0 - $form-spacing / 2; }
.row .d { margin: 0 -$form-spacing / 2; }
.row .e { margin: 0 (-$form-spacing / 2); }

.alt .a { margin: 0-1em / 2; }
.alt .b { margin: 0- 1em / 2; }
.alt .c { margin: 0 - 1em / 2; }
.alt .d { margin: 0 -1em / 2; }
.alt .e { margin: 0 (-1em / 2); }

.row .f { margin: 0-$form-spacing * 2; }
.row .g { margin: 0- $form-spacing * 2; }
.row .h { margin: 0 - $form-spacing * 2; }
.row .i { margin: 0 -$form-spacing * 2; }
.row .j { margin: 0 (-$form-spacing * 2); }

.alt .f { margin: 0-1em * 2; }
.alt .g { margin: 0- 1em * 2; }
.alt .h { margin: 0 - 1em * 2; }
.alt .i { margin: 0 -1em * 2; }
.alt .j { margin: 0 (-1em * 2); }

$gridColumns:             12 !default;
$gridColumnWidth:         60px !default;
$gridGutterWidth:         20px !default;
$gridRowWidth:            ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)) !default;

$fluidGridGutterWidth:    percentage($gridGutterWidth/$gridRowWidth) !default;

div {
*margin-left: $fluidGridGutterWidth - (.5 / $gridRowWidth * 100px * 1%);
}

$gridRowWidth: 20px;

.foo
{
width: (2.5 / $gridRowWidth * 100px * 1% );
}

$and: true and false;
$or: false or true;

$and1: null and true;  // (null)
$and2: true and null;  // (null)
$and3: null and false; // (null)
$and4: false and null; // false
$and5: one and null;   // (null)
$and6: null and one;   // (null)

$or1: null or true;    // true
$or2: true or null;    // true
$or3: null or false;   // false
$or4: false or null;   // (null)
$or5: one or null;     // one
$or6: null or one;     // one

#bools-test {
  a: $and;
  b: $or;
  c: $and1;
  d: $and2;
  e: $and3;
  f: $and4;
  g: $and5;
  h: $and6;
  n: $or1;
  o: $or2;
  p: $or3;
  q: $or4;
  r: $or5;
  s: $or6;
}

a {
  width: 14px / 1440px * 100vw;
  height: (14px * 100vw) / 1440px;
}
