﻿::: { s:s, r8:r8, r4:r4, i8:i8, i4:i4, i2:i2, i1:i1, u8:u8, u4:u4, u2:u2, u1:u1, qr8:r8?, qr4:r4?, qi8:i8?, qi4:i4?, qi2:i2?, qi1:i1?, qu8:u8?, qu4:u4?, qu2:u2?, qu1:u1?}

//i4
Mod(Wrap(3), 4)
Mod(Wrap(3), -4)
Mod(Wrap(2), -1)
Mod(Wrap(2), Wrap(-1))
Mod(Wrap(2), 0)
Mod(Wrap(2), Wrap(0))
Mod(Wrap(0x3FFFFFFF), 2)
Mod(Wrap(0x3FFFFFFF), 4)
Mod(Wrap(0x3FFFFFFF), Wrap(0))
Mod(Wrap(-0), 2)
Mod(Wrap(-2), -0)
Mod(i4, 3)
Mod(3, i4)
Mod(Wrap(0x80000000i4), -1)
Mod(Wrap(0x80000000i4), Wrap(-1))

//i8
Mod(i8+3, 4)
Mod(i8+2, -1)
Mod(i8+2, Wrap(-1))
Mod(Wrap(0x3FFFFFFFF), 2)
Mod(Wrap(0x3FFFFFFFF), 4)
Mod(Wrap(0x3FFFFFFFF), Wrap(0))
Mod(Wrap(0x8000000000000000i8), -1)
Mod(Wrap(0x8000000000000000i8), Wrap(-1))

//u4
Mod(u4+2u, 2)
Mod(u4+10u, 4)
Mod(Wrap(0x7FFFFFFFU), 2)
Mod(Wrap(0x7FFFFFFFU), 2U)
Mod(Wrap(0x7FFFFFFFU), Wrap(0U))
Mod(Wrap(0x7FFFFFFFU), 4)
Mod(Wrap(0x812345u4), 0x81234567u4)
Mod(Wrap(0x80123456u4), 0x81234567u4)
Mod(Wrap(0x81234567u4), 0x80123456u4)
Mod(Wrap(0x81234567u4), 0x812345u4)

//u8
Mod(Wrap(0x7FFFFFFFFFU), 2U)
Mod(Wrap(0x7FFFFFFFFFU), Wrap(0U))

//r4
Mod(Wrap(-0f), 2f)
Mod(Wrap(-0.0), 2.0)
Mod(Wrap(2f), 0f)
Mod(Wrap(-2.0), -0.0)
Mod(Wrap(2.0), 4.0)
Mod(Wrap(2.0), 3.0)

//r8
Mod(r8+1.0, 2.0)
Mod(r8-2.0, 2.0)
Mod(r8-2.0, -0.0)
Mod(r8, 0f)
Mod(r8, -0f)
Mod(r8, 2.0)
Mod(Wrap(-2e100), -0f)
Mod(Wrap(2e100), 2)
Mod(Wrap(2e100), 3)
Mod(1.0/0, r8)
Mod(-1.0/0, r8)
Mod(0.0/0, r8)
Mod(-0.0/0, r8)


//i
Mod(Wrap(0x7FFFFFFFFFU), 2)
Mod(Wrap(0x7FFFFFFFFFU), 4)

Mod(Wrap(0x3FFFFFFFFFFFFFFFF), 2)
Mod(Wrap(0x3FFFFFFFFFFFFFFFF), -4)
Mod(Wrap(0x3FFFFFFFFFFFFFFFF), Wrap(0))

// Make sure values for CodeGen and Reduce paths are equivalent.
Mod(Wrap(3), 4) = Mod(3, 4)
Mod(Wrap(3i8), 4) = Mod(3i8, 4)
Mod(Wrap(0x80000000i4), Wrap(-1)) = Mod(0x80000000i4, -1)
Mod(Wrap(0x8000000000000000i8), Wrap(-1)) = Mod(0x8000000000000000i8, -1)
Mod(Wrap(2), Wrap(0)) = Mod(2, 0)
Mod(Wrap(2i8), Wrap(0)) = Mod(2i8, 0)
Mod(Wrap(3u), 4u) = Mod(3u, 4u)
Mod(Wrap(3u8), 4u) = Mod(3u8, 4u)
Mod(Wrap(3), -4) = Mod(3, -4)
Mod(Wrap(2u), Wrap(0u)) = Mod(2u, 0u)
Mod(Wrap(2u8), Wrap(0u)) = Mod(2u8, 0u)
Mod(Wrap(2.0), 4.0) = Mod(2.0, 4.0)
Mod(Wrap(2f), 0f) = Mod(2f, 0f)
Mod(Wrap(-2.0), -0.0) = Mod(-2.0, -0.0)
Mod(Wrap(0.0), 0.0) = Mod(0.0, 0.0)
Mod(Wrap(-0.0), 0.0) = Mod(-0.0, 0.0)
Mod(r8+1.0, 2.0) = Mod(1.0r8, 2.0)
Mod(Wrap(-2e100), -0f) = Mod(-2e100, -0f)
Mod(Wrap(0x812345u4), 0x81234567u4) = Mod(0x812345u4, 0x81234567u4)
Mod(Wrap(0x80123456u4), 0x81234567u4) = Mod(0x80123456u4, 0x81234567u4)
Mod(Wrap(0x81234567u4), 0x80123456u4) = Mod(0x81234567u4, 0x80123456u4)
Mod(Wrap(0x81234567u4), 0x812345u4) = Mod(0x81234567u4, 0x812345u4)
