proconlib

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub anqooqie/proconlib

:heavy_check_mark: tests/mod.test.cpp

Depends on

Code

// competitive-verifier: STANDALONE

#include <cstdint>
#include <iostream>
#include "tools/assert_that.hpp"
#include "tools/mod.hpp"

/*
import itertools

class IntType:
  def __init__(self, name, lb, ub):
    self.name = name
    self.lb = lb
    self.ub = ub
  
  def to_s(self, x: int) -> str:
    if self.name == "std::int32_t":
      if x == self.lb:
        return f"INT32_C({x + 1}) - INT32_C(1)"
      else:
        return f"INT32_C({x})"
    elif self.name == "std::uint32_t":
      return f"UINT32_C({x})"
    elif self.name == "std::int64_t":
      if x == self.lb:
        return f"INT64_C({x + 1}) - INT64_C(1)"
      else:
        return f"INT64_C({x})"
    elif self.name == "std::uint64_t":
      return f"UINT64_C({x})"
    else:
      raise ValueError(f"Unsupported type: {self.type}")

typedefs = [
  IntType("std::int32_t", -(1 << 31), (1 << 31) - 1),
  IntType("std::uint32_t", 0, (1 << 32) - 1),
  IntType("std::int64_t", -(1 << 63), (1 << 63) - 1),
  IntType("std::uint64_t", 0, (1 << 64) - 1)
]
values = list(itertools.chain(
  range(-(1 << 64) - 2, -(1 << 64) + 3),
  range(-(1 << 63) - 2, -(1 << 63) + 3),
  range(-(1 << 32) - 2, -(1 << 32) + 3),
  range(-(1 << 31) - 2, -(1 << 31) + 3),
  range(-5, 6),
  range((1 << 31) - 2, (1 << 31) + 3),
  range((1 << 32) - 2, (1 << 32) + 3),
  range((1 << 63) - 2, (1 << 63) + 3),
  range((1 << 64) - 2, (1 << 64) + 3)
))
for i1 in range(0, len(typedefs)):
  t1 = typedefs[i1]
  for i2 in range(0, len(typedefs)):
    t2 = typedefs[i2]
    t3 = typedefs[max(i1, i2)]
    for x1 in values:
      for x2 in values:
        if not (t1.lb <= x1 <= t1.ub and t2.lb <= x2 <= t2.ub and x2 != 0):
          continue
        r = x1 % abs(x2)
        q = (x1 - r) // x2
        x3 = r
        s1 = t1.to_s(x1)
        s2 = t2.to_s(x2)
        s3 = t3.to_s(x3)
        if not (t3.lb <= x3 <= t3.ub):
          continue
        print(f"  assert_that(tools::mod({s1}, {s2}) == {s3});")
*/

int main() {
  std::cin.tie(nullptr);
  std::ios_base::sync_with_stdio(false);

  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483647)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483646)) == INT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-5), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2147483646)) == INT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2147483647)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483647)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483646)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-4), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2147483646)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2147483647)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483647)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483646)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2147483646)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2147483647)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483647)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2147483647)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-1), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-1), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-1), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483647)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483646)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(2147483646)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(2147483647)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483647)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483646)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(3), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(3), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(2147483646)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(2147483647)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483647)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483646)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(4), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(2147483646)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(2147483647)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483647)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483646)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(5), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(2147483646)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(2147483647)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483646)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483646)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4294967295)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4294967294)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4294967295)) == UINT32_C(2147483649));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483646)) == UINT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483647)) == UINT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483648)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483649)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483650)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4294967294)) == UINT32_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4294967295)) == UINT32_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483646)) == UINT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483647)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483648)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483649)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4294967294)) == UINT32_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4294967295)) == UINT32_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483646)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483647)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483648)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4294967294)) == UINT32_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4294967295)) == UINT32_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483646)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483647)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483650)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4294967294)) == UINT32_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4294967295)) == UINT32_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483646)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483649)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483650)) == UINT32_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4294967294)) == UINT32_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4294967295)) == UINT32_C(4294967294));
  assert_that(tools::mod(INT32_C(0), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483650)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4294967295)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4294967294)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4294967295)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483648)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4294967294)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4294967295)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483648)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483649)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4294967294)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4294967295)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(5), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483648)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483649)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483650)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4294967294)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4294967295)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), INT64_C(9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), INT64_C(9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), INT64_C(9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), INT64_C(9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-1), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-1), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967298)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967298)) == UINT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292164));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067969));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483647)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483648)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483649)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967294)) == UINT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967295)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967296)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967297)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967298)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551609));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483648)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967295)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967296)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967297)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483648)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967296)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(INT32_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483650)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4294967295)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4294967294)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4294967295)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483648)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4294967294)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4294967295)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483648)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483649)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4294967294)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4294967295)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483648)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483649)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483650)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4294967294)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4294967295)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483649)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483650)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4294967294)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4294967295)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483650)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4294967294)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4294967295)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4294967294)) == UINT32_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4294967295)) == UINT32_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483649)) == UINT32_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483650)) == UINT32_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4294967295)) == UINT32_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483650)) == UINT32_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(0), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(9223372036854775806)) == INT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(9223372036854775807)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(9223372036854775806)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(9223372036854775807)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(9223372036854775806)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(9223372036854775807)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(9223372036854775806)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(9223372036854775807)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(9223372036854775806)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(9223372036854775807)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(9223372036854775806)) == INT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(9223372036854775807)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(9223372036854775806)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(9223372036854775807)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), INT64_C(9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), INT64_C(9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), INT64_C(9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), INT64_C(9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775807)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775806)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(9223372036854775806)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(9223372036854775807)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775807)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775806)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(9223372036854775806)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(9223372036854775807)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775807)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775806)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(9223372036854775806)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(9223372036854775807)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483646)) == UINT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483650)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483646)) == UINT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483650)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483646)) == UINT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483646)) == UINT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584316));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584317));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584317));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584318));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584318));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584319));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808515));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584319));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584320));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808515));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808516));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584320));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584321));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967294)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967295)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067964));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067965));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967294)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067965));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967298)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967298)) == UINT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292164));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067969));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483647)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483648)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483649)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967294)) == UINT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967295)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967296)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967297)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967298)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551609));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483648)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967295)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967296)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967297)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483648)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967296)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(INT64_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775810));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775810));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(18446744073709551615)) == UINT64_C(0));

  return 0;
}
#line 1 "tests/mod.test.cpp"
// competitive-verifier: STANDALONE

#include <cstdint>
#include <iostream>
#line 1 "tools/assert_that.hpp"



#line 5 "tools/assert_that.hpp"
#include <cstdlib>

#define assert_that_impl(cond, file, line, func) do {\
  if (!cond) {\
    ::std::cerr << file << ':' << line << ": " << func << ": Assertion `" << #cond << "' failed." << '\n';\
    ::std::exit(EXIT_FAILURE);\
  }\
} while (false)
#define assert_that(...) assert_that_impl((__VA_ARGS__), __FILE__, __LINE__, __func__)


#line 1 "tools/mod.hpp"



#include <cassert>
#include <type_traits>
#line 1 "tools/is_integral.hpp"



#line 5 "tools/is_integral.hpp"

namespace tools {
  template <typename T>
  struct is_integral : ::std::is_integral<T> {};

  template <typename T>
  inline constexpr bool is_integral_v = ::tools::is_integral<T>::value;
}


#line 7 "tools/mod.hpp"

namespace tools {

  template <typename M, typename N> requires (
    ::tools::is_integral_v<M> && !::std::is_same_v<::std::remove_cv_t<M>, bool> &&
    ::tools::is_integral_v<N> && !::std::is_same_v<::std::remove_cv_t<N>, bool>)
  constexpr ::std::common_type_t<M, N> mod(const M a, const N b) noexcept {
    assert(b != 0);

    using UM = ::std::make_unsigned_t<M>;
    using UN = ::std::make_unsigned_t<N>;
    const UM ua = a >= 0 ? a : static_cast<UM>(-(a + 1)) + 1;
    const UN ub = b >= 0 ? b : static_cast<UN>(-(b + 1)) + 1;
    auto r = ua % ub;
    if (a < 0 && r > 0) {
      r = ub - r;
    }
    return r;
  }
}


#line 7 "tests/mod.test.cpp"

/*
import itertools

class IntType:
  def __init__(self, name, lb, ub):
    self.name = name
    self.lb = lb
    self.ub = ub
  
  def to_s(self, x: int) -> str:
    if self.name == "std::int32_t":
      if x == self.lb:
        return f"INT32_C({x + 1}) - INT32_C(1)"
      else:
        return f"INT32_C({x})"
    elif self.name == "std::uint32_t":
      return f"UINT32_C({x})"
    elif self.name == "std::int64_t":
      if x == self.lb:
        return f"INT64_C({x + 1}) - INT64_C(1)"
      else:
        return f"INT64_C({x})"
    elif self.name == "std::uint64_t":
      return f"UINT64_C({x})"
    else:
      raise ValueError(f"Unsupported type: {self.type}")

typedefs = [
  IntType("std::int32_t", -(1 << 31), (1 << 31) - 1),
  IntType("std::uint32_t", 0, (1 << 32) - 1),
  IntType("std::int64_t", -(1 << 63), (1 << 63) - 1),
  IntType("std::uint64_t", 0, (1 << 64) - 1)
]
values = list(itertools.chain(
  range(-(1 << 64) - 2, -(1 << 64) + 3),
  range(-(1 << 63) - 2, -(1 << 63) + 3),
  range(-(1 << 32) - 2, -(1 << 32) + 3),
  range(-(1 << 31) - 2, -(1 << 31) + 3),
  range(-5, 6),
  range((1 << 31) - 2, (1 << 31) + 3),
  range((1 << 32) - 2, (1 << 32) + 3),
  range((1 << 63) - 2, (1 << 63) + 3),
  range((1 << 64) - 2, (1 << 64) + 3)
))
for i1 in range(0, len(typedefs)):
  t1 = typedefs[i1]
  for i2 in range(0, len(typedefs)):
    t2 = typedefs[i2]
    t3 = typedefs[max(i1, i2)]
    for x1 in values:
      for x2 in values:
        if not (t1.lb <= x1 <= t1.ub and t2.lb <= x2 <= t2.ub and x2 != 0):
          continue
        r = x1 % abs(x2)
        q = (x1 - r) // x2
        x3 = r
        s1 = t1.to_s(x1)
        s2 = t2.to_s(x2)
        s3 = t3.to_s(x3)
        if not (t3.lb <= x3 <= t3.ub):
          continue
        print(f"  assert_that(tools::mod({s1}, {s2}) == {s3});")
*/

int main() {
  std::cin.tie(nullptr);
  std::ios_base::sync_with_stdio(false);

  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT32_C(2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483647)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2147483646)) == INT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-5), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-5), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2147483646)) == INT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT32_C(2147483647)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483647)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2147483646)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-4), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-4), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2147483646)) == INT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT32_C(2147483647)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483647)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2147483646)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-3), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-3), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2147483646)) == INT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT32_C(2147483647)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483647)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-2), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-2), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2147483646)) == INT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT32_C(2147483647)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(-1), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(-1), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(-1), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2147483646)) == INT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(0), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(1), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(1), INT32_C(2147483647)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483647)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2147483646)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(2147483646)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2), INT32_C(2147483647)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483647)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2147483646)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(3), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(3), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(3), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(5)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(2147483646)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(3), INT32_C(2147483647)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483647)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2147483646)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(-4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(4), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(4), INT32_C(4)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(4), INT32_C(5)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(2147483646)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(4), INT32_C(2147483647)) == INT32_C(4));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483647)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2147483646)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(-5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(-4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(-3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(5), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(3)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(5), INT32_C(4)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(5), INT32_C(5)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(5), INT32_C(2147483646)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(5), INT32_C(2147483647)) == INT32_C(5));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(3)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(4)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(5)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2147483646)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT32_C(2147483647)) == INT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(-1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(1)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(3)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(4)) == INT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(5)) == INT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2147483646)) == INT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT32_C(2147483647)) == INT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483646)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483646)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT32_C(4294967295)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4294967294)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT32_C(4294967295)) == UINT32_C(2147483649));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483646)) == UINT32_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483647)) == UINT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483648)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483649)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(2147483650)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4294967294)) == UINT32_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), UINT32_C(4294967295)) == UINT32_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483646)) == UINT32_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483647)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483648)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483649)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4294967294)) == UINT32_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT32_C(4294967295)) == UINT32_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483646)) == UINT32_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483647)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483648)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4294967294)) == UINT32_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT32_C(4294967295)) == UINT32_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483646)) == UINT32_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483647)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(2147483650)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4294967294)) == UINT32_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT32_C(4294967295)) == UINT32_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483646)) == UINT32_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483649)) == UINT32_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(2147483650)) == UINT32_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4294967294)) == UINT32_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT32_C(4294967295)) == UINT32_C(4294967294));
  assert_that(tools::mod(INT32_C(0), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(2147483650)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(1), UINT32_C(4294967295)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4294967294)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2), UINT32_C(4294967295)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483648)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4294967294)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(3), UINT32_C(4294967295)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(4), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483648)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483649)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4294967294)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(4), UINT32_C(4294967295)) == UINT32_C(4));
  assert_that(tools::mod(INT32_C(5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(5), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483648)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483649)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(2147483650)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4294967294)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(5), UINT32_C(4294967295)) == UINT32_C(5));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), INT64_C(4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), INT64_C(9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), INT64_C(9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-4), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), INT64_C(9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), INT64_C(9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-3), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), INT64_C(9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), INT64_C(9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-2), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-2), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), INT64_C(9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(-1), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(-1), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT32_C(-2147483647) - INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(4294967298)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT32_C(-2147483647), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(4294967298)) == UINT64_C(2147483652));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292164));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT32_C(-2147483646), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067969));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483647)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483648)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483649)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967294)) == UINT64_C(4294967289));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967295)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967296)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967297)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(4294967298)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775801));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551609));
  assert_that(tools::mod(INT32_C(-5), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483648)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967295)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967296)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967297)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT32_C(-4), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483648)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967296)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT32_C(-3), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT32_C(-2), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT32_C(-1), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(INT32_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(INT32_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), INT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), INT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), INT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), INT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(-1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(2147483650)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT32_C(4294967295)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483649)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(2147483650)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4294967294)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT32_C(4294967295)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483648)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483649)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(2147483650)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4294967294)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT32_C(4294967295)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483647)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483648)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483649)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(2147483650)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4294967294)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT32_C(4294967295)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483646)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483647)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483648)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483649)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(2147483650)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4294967294)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT32_C(4294967295)) == UINT32_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(5)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(5)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(5)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483648)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483649)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(2147483650)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4294967294)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT32_C(4294967295)) == UINT32_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483647)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483648)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483649)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(2147483650)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4294967294)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT32_C(4294967295)) == UINT32_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(3)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483646)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483647)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483648)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483649)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(2147483650)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4294967294)) == UINT32_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT32_C(4294967295)) == UINT32_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(3)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(5)) == UINT32_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483646)) == UINT32_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483647)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483648)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483649)) == UINT32_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(2147483650)) == UINT32_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4294967294)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT32_C(4294967295)) == UINT32_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(1)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(3)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(5)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483646)) == UINT32_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483647)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483648)) == UINT32_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483649)) == UINT32_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(2147483650)) == UINT32_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4294967294)) == UINT32_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT32_C(4294967295)) == UINT32_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT32_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT32_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT32_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), UINT32_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), UINT32_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT32_C(4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), UINT32_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT32_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT32_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT32_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(0), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT32_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT32_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT32_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT32_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT32_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT32_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT32_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT32_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT32_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT32_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT32_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT32_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483646)) == INT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483650)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483646)) == INT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(2147483650)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483646)) == INT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(9223372036854775806)) == INT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), INT64_C(9223372036854775807)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(9223372036854775806)) == INT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), INT64_C(9223372036854775807)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(9223372036854775806)) == INT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), INT64_C(9223372036854775807)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(9223372036854775806)) == INT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), INT64_C(9223372036854775807)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775807)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-9223372036854775806)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(9223372036854775806)) == INT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), INT64_C(9223372036854775807)) == INT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967294)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967295)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(9223372036854775806)) == INT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), INT64_C(9223372036854775807)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967294)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(9223372036854775806)) == INT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), INT64_C(9223372036854775807)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(9223372036854775806)) == INT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), INT64_C(9223372036854775807)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(4294967298)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967297)) == INT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(4294967298)) == INT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483646)) == INT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483647)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483648)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483649)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967294)) == INT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967295)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967296)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967297)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), INT64_C(4294967298)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), INT64_C(9223372036854775806)) == INT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), INT64_C(9223372036854775807)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-4), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483646)) == INT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483647)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483648)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967294)) == INT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967295)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967296)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967297)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), INT64_C(9223372036854775806)) == INT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), INT64_C(9223372036854775807)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-3), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483646)) == INT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483647)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483648)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967294)) == INT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967295)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967296)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), INT64_C(9223372036854775806)) == INT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), INT64_C(9223372036854775807)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-2), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-2), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483646)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483647)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967294)) == INT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967295)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), INT64_C(9223372036854775806)) == INT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), INT64_C(9223372036854775807)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(-1), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(-1), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483646)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967294)) == INT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), INT64_C(9223372036854775806)) == INT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(1), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(2147483650)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483649)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(2147483650)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967297)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(4294967298)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(9223372036854775806)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2), INT64_C(9223372036854775807)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(3), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(3), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483648)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483649)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(2147483650)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967296)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967297)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(4294967298)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(9223372036854775806)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(3), INT64_C(9223372036854775807)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483648)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483649)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(2147483650)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967295)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967296)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967297)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(4294967298)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(9223372036854775806)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4), INT64_C(9223372036854775807)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(5), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(5), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483647)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483648)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483649)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(2147483650)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967294)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967295)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967296)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967297)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(4294967298)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(9223372036854775806)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(5), INT64_C(9223372036854775807)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483646)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483647)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967294)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967296)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967297)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(4294967298)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967294)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967296)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(4294967298)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967294)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967295)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967296)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(4294967298)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(2147483650)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967294)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967295)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967296)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967297)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(4294967298)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(2147483650)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967294)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967295)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967296)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967297)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(4294967298)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(5)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483649)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(2147483650)) == INT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967295)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967297)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(4294967298)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(5)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483646)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483649)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(2147483650)) == INT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967295)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967297)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(4294967298)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775807)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-9223372036854775806)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483646)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483647)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483648)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483649)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(2147483650)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967294)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967295)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967296)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967297)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(4294967298)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(9223372036854775806)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), INT64_C(9223372036854775807)) == INT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775807)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-9223372036854775806)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(3)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483646)) == INT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483647)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483648)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483649)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(2147483650)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967294)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967295)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967296)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967297)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(4294967298)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(9223372036854775806)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), INT64_C(9223372036854775807)) == INT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775807)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-9223372036854775806)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(5)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483647)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483648)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(2147483650)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967294)) == INT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967295)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967296)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967297)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(9223372036854775806)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), INT64_C(9223372036854775807)) == INT64_C(4294967298));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(3)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(5)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483646)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483647)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483648)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483649)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(2147483650)) == INT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967294)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967296)) == INT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(4294967298)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(-1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(1)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(3)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4)) == INT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(5)) == INT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483646)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483647)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483648)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483649)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(2147483650)) == INT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967294)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967296)) == INT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(4294967298)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483646)) == UINT64_C(2147483638));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(2147483650)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-9223372036854775807) - INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483646)) == UINT64_C(2147483639));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(2147483650)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483646)) == UINT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483646)) == UINT64_C(2147483640));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808508));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584316));
  assert_that(tools::mod(INT64_C(-4294967298), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584317));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808509));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584317));
  assert_that(tools::mod(INT64_C(-4294967297), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584318));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808510));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584318));
  assert_that(tools::mod(INT64_C(-4294967296), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584319));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808511));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808515));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584319));
  assert_that(tools::mod(INT64_C(-4294967295), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584320));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775806)) == UINT64_C(9223372032559808512));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775807)) == UINT64_C(9223372032559808513));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775808)) == UINT64_C(9223372032559808514));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775809)) == UINT64_C(9223372032559808515));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(9223372036854775810)) == UINT64_C(9223372032559808516));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(18446744073709551614)) == UINT64_C(18446744069414584320));
  assert_that(tools::mod(INT64_C(-4294967294), UINT64_C(18446744073709551615)) == UINT64_C(18446744069414584321));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967294)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967295)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292156));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067964));
  assert_that(tools::mod(INT64_C(-2147483650), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067965));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967294)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292157));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067965));
  assert_that(tools::mod(INT64_C(-2147483649), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292158));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067966));
  assert_that(tools::mod(INT64_C(-2147483648), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(4294967298)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292159));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067967));
  assert_that(tools::mod(INT64_C(-2147483647), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(4294967298)) == UINT64_C(2147483652));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775806)) == UINT64_C(9223372034707292160));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775807)) == UINT64_C(9223372034707292161));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775808)) == UINT64_C(9223372034707292162));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775809)) == UINT64_C(9223372034707292163));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(9223372036854775810)) == UINT64_C(9223372034707292164));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(18446744073709551614)) == UINT64_C(18446744071562067968));
  assert_that(tools::mod(INT64_C(-2147483646), UINT64_C(18446744073709551615)) == UINT64_C(18446744071562067969));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483646)) == UINT64_C(2147483641));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483647)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483648)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483649)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967294)) == UINT64_C(4294967289));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967295)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967296)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967297)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(4294967298)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775801));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551609));
  assert_that(tools::mod(INT64_C(-5), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483646)) == UINT64_C(2147483642));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483647)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483648)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967294)) == UINT64_C(4294967290));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967295)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967296)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967297)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775802));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551610));
  assert_that(tools::mod(INT64_C(-4), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483646)) == UINT64_C(2147483643));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483647)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483648)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967294)) == UINT64_C(4294967291));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967295)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967296)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775803));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551611));
  assert_that(tools::mod(INT64_C(-3), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483646)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483647)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967294)) == UINT64_C(4294967292));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967295)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551612));
  assert_that(tools::mod(INT64_C(-2), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483646)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967294)) == UINT64_C(4294967293));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775806)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(18446744073709551614)) == UINT64_C(18446744073709551613));
  assert_that(tools::mod(INT64_C(-1), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(INT64_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(4294967296));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(4294967297));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(4294967298));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(INT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT32_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT32_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT32_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT32_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT32_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT32_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT32_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT32_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT32_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT32_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT32_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT32_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT32_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT32_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT32_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT32_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT32_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT32_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT32_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT32_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT32_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT32_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT32_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), INT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), INT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), INT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), INT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), INT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), INT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), INT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), INT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), INT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), INT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), INT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), INT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), INT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), INT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), INT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), INT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), INT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), INT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(-1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), INT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(2147483650)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(2147483650)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967297)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483648)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(2147483650)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967296)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967297)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483648)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(2147483650)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967295)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967296)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967297)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483647)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483648)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483649)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(2147483650)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967294)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967295)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967296)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967297)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(4294967298)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(2147483644));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(2147483645));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(5));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(4294967297));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(4294967298));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(6));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(7));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(5)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483646)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483648)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(2147483650)) == UINT64_C(8));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967295)) == UINT64_C(2147483648));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967296)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967297)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775808)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775808), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775808));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483646)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483648)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(2147483650)) == UINT64_C(9));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967295)) == UINT64_C(2147483649));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967296)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967297)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775807)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775808)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775809)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775809), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775809));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(3)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483646)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483647)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483648)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483649)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(2147483650)) == UINT64_C(10));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967294)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967295)) == UINT64_C(2147483650));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967296)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967297)) == UINT64_C(2147483651));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(4294967298)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775806)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775807)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775808)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775809)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(9223372036854775810)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(18446744073709551614)) == UINT64_C(9223372036854775810));
  assert_that(tools::mod(UINT64_C(9223372036854775810), UINT64_C(18446744073709551615)) == UINT64_C(9223372036854775810));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(3)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(5)) == UINT64_C(4));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483646)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483647)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483648)) == UINT64_C(2147483646));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483649)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(2147483650)) == UINT64_C(14));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967294)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967295)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967296)) == UINT64_C(4294967294));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967297)) == UINT64_C(4294967296));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(4294967298)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775806)) == UINT64_C(2));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775807)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775804));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(18446744073709551614)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551614), UINT64_C(18446744073709551615)) == UINT64_C(18446744073709551614));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(1)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(3)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(5)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483646)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483647)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483648)) == UINT64_C(2147483647));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483649)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(2147483650)) == UINT64_C(15));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967294)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967295)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967296)) == UINT64_C(4294967295));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967297)) == UINT64_C(0));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(4294967298)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775806)) == UINT64_C(3));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775807)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775808)) == UINT64_C(9223372036854775807));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775809)) == UINT64_C(9223372036854775806));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(9223372036854775810)) == UINT64_C(9223372036854775805));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(18446744073709551614)) == UINT64_C(1));
  assert_that(tools::mod(UINT64_C(18446744073709551615), UINT64_C(18446744073709551615)) == UINT64_C(0));

  return 0;
}
Back to top page