#name: integer-specific arithmetic
#evalPartial
-- in.cue --
q1:  5 quo 2   // 2
q2:  5 quo -2  // -2
q3:  -5 quo 2  // -2
q4:  -5 quo -2 // 2
qe1: 2.0 quo 1
qe2: 2 quo 1.0

r1:  5 rem 2   // 1
r2:  5 rem -2  // 1
r3:  -5 rem 2  // -1
r4:  -5 rem -2 // -1
re1: 2.0 rem 1
re2: 2 rem 1.0

d1:  5 div 2   // 2
d2:  5 div -2  // -2
d3:  -5 div 2  // -3
d4:  -5 div -2 // 3
de1: 2.0 div 1
de2: 2 div 1.0

m1:  5 mod 2   // 1
m2:  5 mod -2  // 1
m3:  -5 mod 2  // 1
m4:  -5 mod -2 // 1
me1: 2.0 mod 1
me2: 2 mod 1.0
-- out/def --
q1:  2
q2:  -2
q3:  -2
q4:  2
qe1: _|_ // invalid operation 2.0 quo 1 (mismatched types float and int)
qe2: _|_ // invalid operation 2 quo 1.0 (mismatched types int and float)
r1:  1
r2:  1
r3:  -1
r4:  -1
re1: _|_ // invalid operation 2.0 rem 1 (mismatched types float and int)
re2: _|_ // invalid operation 2 rem 1.0 (mismatched types int and float)
d1:  2
d2:  -2
d3:  -3
d4:  3
de1: _|_ // invalid operation 2.0 div 1 (mismatched types float and int)
de2: _|_ // invalid operation 2 div 1.0 (mismatched types int and float)
m1:  1
m2:  1
m3:  1
m4:  1
me1: _|_ // invalid operation 2.0 mod 1 (mismatched types float and int)
me2: _|_ // invalid operation 2 mod 1.0 (mismatched types int and float)
-- out/legacy-debug --
<0>{q1: 2, q2: -2, q3: -2, q4: 2, qe1: _|_((2.0 quo 1):invalid operation 2.0 quo 1 (mismatched types float and int)), qe2: _|_((2 quo 1.0):invalid operation 2 quo 1.0 (mismatched types int and float)), r1: 1, r2: 1, r3: -1, r4: -1, re1: _|_((2.0 rem 1):invalid operation 2.0 rem 1 (mismatched types float and int)), re2: _|_((2 rem 1.0):invalid operation 2 rem 1.0 (mismatched types int and float)), d1: 2, d2: -2, d3: -3, d4: 3, de1: _|_((2.0 div 1):invalid operation 2.0 div 1 (mismatched types float and int)), de2: _|_((2 div 1.0):invalid operation 2 div 1.0 (mismatched types int and float)), m1: 1, m2: 1, m3: 1, m4: 1, me1: _|_((2.0 mod 1):invalid operation 2.0 mod 1 (mismatched types float and int)), me2: _|_((2 mod 1.0):invalid operation 2 mod 1.0 (mismatched types int and float))}
-- out/compile --
--- in.cue
{
  q1: (5 quo 2)
  q2: (5 quo -2)
  q3: (-5 quo 2)
  q4: (-5 quo -2)
  qe1: (2.0 quo 1)
  qe2: (2 quo 1.0)
  r1: (5 rem 2)
  r2: (5 rem -2)
  r3: (-5 rem 2)
  r4: (-5 rem -2)
  re1: (2.0 rem 1)
  re2: (2 rem 1.0)
  d1: (5 div 2)
  d2: (5 div -2)
  d3: (-5 div 2)
  d4: (-5 div -2)
  de1: (2.0 div 1)
  de2: (2 div 1.0)
  m1: (5 mod 2)
  m2: (5 mod -2)
  m3: (-5 mod 2)
  m4: (-5 mod -2)
  me1: (2.0 mod 1)
  me2: (2 mod 1.0)
}
-- out/eval/stats --
Leaks:  0
Freed:  25
Reused: 23
Allocs: 2
Retain: 0

Unifications: 25
Conjuncts:    25
Disjuncts:    25
-- out/eval --
Errors:
qe1: invalid operands 2.0 and 1 to 'quo' (type float and int):
    ./in.cue:5:6
    ./in.cue:5:14
qe2: invalid operands 2 and 1.0 to 'quo' (type int and float):
    ./in.cue:6:6
    ./in.cue:6:12
re1: invalid operands 2.0 and 1 to 'rem' (type float and int):
    ./in.cue:12:6
    ./in.cue:12:14
re2: invalid operands 2 and 1.0 to 'rem' (type int and float):
    ./in.cue:13:6
    ./in.cue:13:12
de1: invalid operands 2.0 and 1 to 'div' (type float and int):
    ./in.cue:19:6
    ./in.cue:19:14
de2: invalid operands 2 and 1.0 to 'div' (type int and float):
    ./in.cue:20:6
    ./in.cue:20:12
me1: invalid operands 2.0 and 1 to 'mod' (type float and int):
    ./in.cue:26:6
    ./in.cue:26:14
me2: invalid operands 2 and 1.0 to 'mod' (type int and float):
    ./in.cue:27:6
    ./in.cue:27:12

Result:
(_|_){
  // [eval]
  q1: (int){ 2 }
  q2: (int){ -2 }
  q3: (int){ -2 }
  q4: (int){ 2 }
  qe1: (_|_){
    // [eval] qe1: invalid operands 2.0 and 1 to 'quo' (type float and int):
    //     ./in.cue:5:6
    //     ./in.cue:5:14
  }
  qe2: (_|_){
    // [eval] qe2: invalid operands 2 and 1.0 to 'quo' (type int and float):
    //     ./in.cue:6:6
    //     ./in.cue:6:12
  }
  r1: (int){ 1 }
  r2: (int){ 1 }
  r3: (int){ -1 }
  r4: (int){ -1 }
  re1: (_|_){
    // [eval] re1: invalid operands 2.0 and 1 to 'rem' (type float and int):
    //     ./in.cue:12:6
    //     ./in.cue:12:14
  }
  re2: (_|_){
    // [eval] re2: invalid operands 2 and 1.0 to 'rem' (type int and float):
    //     ./in.cue:13:6
    //     ./in.cue:13:12
  }
  d1: (int){ 2 }
  d2: (int){ -2 }
  d3: (int){ -3 }
  d4: (int){ 3 }
  de1: (_|_){
    // [eval] de1: invalid operands 2.0 and 1 to 'div' (type float and int):
    //     ./in.cue:19:6
    //     ./in.cue:19:14
  }
  de2: (_|_){
    // [eval] de2: invalid operands 2 and 1.0 to 'div' (type int and float):
    //     ./in.cue:20:6
    //     ./in.cue:20:12
  }
  m1: (int){ 1 }
  m2: (int){ 1 }
  m3: (int){ 1 }
  m4: (int){ 1 }
  me1: (_|_){
    // [eval] me1: invalid operands 2.0 and 1 to 'mod' (type float and int):
    //     ./in.cue:26:6
    //     ./in.cue:26:14
  }
  me2: (_|_){
    // [eval] me2: invalid operands 2 and 1.0 to 'mod' (type int and float):
    //     ./in.cue:27:6
    //     ./in.cue:27:12
  }
}
