proconlib

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

View the Project on GitHub anqooqie/proconlib

:heavy_check_mark: tests/floor.test.cpp

Depends on

Code

// competitive-verifier: STANDALONE

#include <cstdint>
#include <iostream>
#include "tools/floor.hpp"

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

  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-4)) == INT32_C(536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2)) == INT32_C(1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(1)) == INT32_C(-2147483647) - INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483647)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-1)) == INT32_C(2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(1)) == INT32_C(-2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-1)) == INT32_C(2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(1)) == INT32_C(-2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2)) == INT32_C(-1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(3)) == INT32_C(-715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-5)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-1)) == INT32_C(5));
  static_assert(tools::floor(INT32_C(-5), INT32_C(1)) == INT32_C(-5));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(-5), INT32_C(3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(4)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-1)) == INT32_C(4));
  static_assert(tools::floor(INT32_C(-4), INT32_C(1)) == INT32_C(-4));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-1)) == INT32_C(3));
  static_assert(tools::floor(INT32_C(-3), INT32_C(1)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-3), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-1)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-2), INT32_C(1)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(1), INT32_C(2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-1)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(2), INT32_C(1)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(2), INT32_C(2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(3), INT32_C(-1)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(3), INT32_C(1)) == INT32_C(3));
  static_assert(tools::floor(INT32_C(3), INT32_C(2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(3), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(3), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(4), INT32_C(-1)) == INT32_C(-4));
  static_assert(tools::floor(INT32_C(4), INT32_C(1)) == INT32_C(4));
  static_assert(tools::floor(INT32_C(4), INT32_C(2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(4), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(4), INT32_C(4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(4), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-4)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(5), INT32_C(-3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(5), INT32_C(-1)) == INT32_C(-5));
  static_assert(tools::floor(INT32_C(5), INT32_C(1)) == INT32_C(5));
  static_assert(tools::floor(INT32_C(5), INT32_C(2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(5), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(5)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(5), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-3)) == INT32_C(-715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2)) == INT32_C(-1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-1)) == INT32_C(-2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(1)) == INT32_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-1)) == INT32_C(-2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(1)) == INT32_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(0), UINT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(3), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(4), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(4), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(5), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT32_C(-5), INT64_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(-5), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT32_C(-4), INT64_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT32_C(-3), INT64_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-3), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-2), INT64_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT32_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT32_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT32_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT32_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT32_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), INT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), INT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(5), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(1)) == UINT32_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(1)) == UINT32_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(1)) == UINT32_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2)) == UINT32_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(5)) == UINT32_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(1)) == UINT32_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(3)) == UINT32_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(5)) == UINT32_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(1)) == UINT32_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(3)) == UINT32_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(5)) == UINT32_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(1)) == UINT32_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(1)) == UINT32_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(1)) == UINT32_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2)) == UINT32_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(5)) == UINT32_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(1)) == UINT32_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(3)) == UINT32_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(5)) == UINT32_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4294967294)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(1)) == UINT32_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(3)) == UINT32_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(5)) == UINT32_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4294967294)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4294967295)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(UINT32_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(UINT32_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-4)) == INT64_C(2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2)) == INT64_C(4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(-5), INT32_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), INT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(-4), INT32_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(-3), INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-2), INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), INT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2), INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), INT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(3), INT32_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(3), INT32_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), INT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT32_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(4), INT32_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), INT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT32_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(5), INT32_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(5), INT32_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), INT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), UINT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967296)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483648)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4)) == INT64_C(2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2)) == INT64_C(4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967298)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967298)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967297)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(-5), INT64_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(-4), INT64_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(-3), INT64_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-2), INT64_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967297)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967298)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967298)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT32_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967297)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967297)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967297)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(18446744073709551614)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967297)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(18446744073709551614)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(18446744073709551615)) == UINT64_C(1));

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

#include <cstdint>
#include <iostream>
#line 1 "tools/floor.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/floor.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> floor(const M x, const N y) noexcept {
    assert(y != 0);
    if (y >= 0) {
      if (x >= 0) {
        return x / y;
      } else {
        return (x + 1) / y - 1;
      }
    } else {
      if (x > 0) {
        return (x - 1) / y - 1;
      } else {
        return x / y;
      }
    }
  }
}


#line 6 "tests/floor.test.cpp"

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

  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-4)) == INT32_C(536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(-2)) == INT32_C(1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(1)) == INT32_C(-2147483647) - INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT32_C(2147483647)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(-1)) == INT32_C(2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(1)) == INT32_C(-2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(-1)) == INT32_C(2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(1)) == INT32_C(-2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2)) == INT32_C(-1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(3)) == INT32_C(-715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-5)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(-1)) == INT32_C(5));
  static_assert(tools::floor(INT32_C(-5), INT32_C(1)) == INT32_C(-5));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(-5), INT32_C(3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(4)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(-1)) == INT32_C(4));
  static_assert(tools::floor(INT32_C(-4), INT32_C(1)) == INT32_C(-4));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(-1)) == INT32_C(3));
  static_assert(tools::floor(INT32_C(-3), INT32_C(1)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-3), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(-1)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(-2), INT32_C(1)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(-1), INT32_C(-1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT32_C(2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(-1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(1)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(0), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(-1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(1), INT32_C(1)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(1), INT32_C(2)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(1), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-2)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2), INT32_C(-1)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(2), INT32_C(1)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(2), INT32_C(2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2), INT32_C(3)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-3)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(3), INT32_C(-2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(3), INT32_C(-1)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(3), INT32_C(1)) == INT32_C(3));
  static_assert(tools::floor(INT32_C(3), INT32_C(2)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(3), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(3), INT32_C(4)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(3), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-4)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(4), INT32_C(-3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(4), INT32_C(-2)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(4), INT32_C(-1)) == INT32_C(-4));
  static_assert(tools::floor(INT32_C(4), INT32_C(1)) == INT32_C(4));
  static_assert(tools::floor(INT32_C(4), INT32_C(2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(4), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(4), INT32_C(4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(4), INT32_C(5)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(4), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-5)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(5), INT32_C(-4)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(5), INT32_C(-3)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(5), INT32_C(-2)) == INT32_C(-3));
  static_assert(tools::floor(INT32_C(5), INT32_C(-1)) == INT32_C(-5));
  static_assert(tools::floor(INT32_C(5), INT32_C(1)) == INT32_C(5));
  static_assert(tools::floor(INT32_C(5), INT32_C(2)) == INT32_C(2));
  static_assert(tools::floor(INT32_C(5), INT32_C(3)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(4)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(5)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(5), INT32_C(2147483646)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(5), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2147483646)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-3)) == INT32_C(-715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-2)) == INT32_C(-1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(-1)) == INT32_C(-2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(1)) == INT32_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2147483646), INT32_C(2147483647)) == INT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483647)) == INT32_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2147483646)) == INT32_C(-2));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-5)) == INT32_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-4)) == INT32_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-3)) == INT32_C(-715827883));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-2)) == INT32_C(-1073741824));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(-1)) == INT32_C(-2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(1)) == INT32_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2)) == INT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(3)) == INT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(4)) == INT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(5)) == INT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2147483646)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT32_C(2147483647)) == INT32_C(1));
  static_assert(tools::floor(INT32_C(0), UINT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(1), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(3), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(3), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(4), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(4), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(4), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(INT32_C(5), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(5), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647) - INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT32_C(-5), INT64_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(-5), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-5), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-5), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT32_C(-4), INT64_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-4), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT32_C(-3), INT64_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-3), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-3), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(-2), INT64_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-2), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(-1), INT64_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(-1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT32_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT32_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT32_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT32_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT32_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT32_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT32_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT32_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(-1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2), INT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), INT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), INT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), INT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), INT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(5), INT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), INT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(1)) == UINT32_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(1)) == UINT32_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(1)) == UINT32_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2)) == UINT32_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(5)) == UINT32_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(1)) == UINT32_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(3)) == UINT32_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(5)) == UINT32_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(1)) == UINT32_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(3)) == UINT32_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(5)) == UINT32_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(1)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(1)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(1)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(3)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(1)) == UINT32_C(3));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(1)) == UINT32_C(4));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(5)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(1)) == UINT32_C(5));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(3)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(5)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483646)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(1)) == UINT32_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483647)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(1)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4)) == UINT32_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483648)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(1)) == UINT32_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(3)) == UINT32_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483649)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(1)) == UINT32_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2)) == UINT32_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(5)) == UINT32_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(2147483650)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(1)) == UINT32_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2)) == UINT32_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(3)) == UINT32_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4)) == UINT32_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(5)) == UINT32_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483646)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483647)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4294967294)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(1)) == UINT32_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(3)) == UINT32_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(5)) == UINT32_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4294967294)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT32_C(4294967295)) == UINT32_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(1)) == UINT32_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2)) == UINT32_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(3)) == UINT32_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4)) == UINT32_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(5)) == UINT32_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483646)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483647)) == UINT32_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483648)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483649)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(2147483650)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4294967294)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT32_C(4294967295)) == UINT32_C(1));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(UINT32_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(UINT32_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT32_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-4)) == INT64_C(2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(-2)) == INT64_C(4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(-1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(-1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT32_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(-1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(-1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(-1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(-1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(-1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(-1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(-1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(-5), INT32_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), INT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(-4), INT32_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(-3), INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-2), INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT32_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), INT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT32_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2), INT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), INT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), INT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT32_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(3), INT32_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(3), INT32_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), INT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT32_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT32_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT32_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(4), INT32_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), INT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT32_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT32_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT32_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(5), INT32_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(5), INT32_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), INT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), INT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), INT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(-1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(-1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(-1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(-1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483647) - INT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(-1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), UINT32_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), UINT32_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), UINT32_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), UINT32_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), UINT32_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT32_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), UINT32_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT32_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT32_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT32_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT32_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967296)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483648)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-4)) == INT64_C(2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(-2)) == INT64_C(4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(1)) == INT64_C(-9223372036854775807) - INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807) - INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(-1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(-1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(4294967298)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967298)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(-1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967297)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967298), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(-1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967297), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(-1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967296), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(-1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967295), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(-1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4294967294), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(-1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483650), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(-1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483649), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(-1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483648), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(-1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483647), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(-1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2147483646), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(-1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(-5), INT64_C(1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-5), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-5), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-5), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(-1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(-4), INT64_C(1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-4), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(-1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(-3), INT64_C(1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-3), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-3), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(-1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(-2), INT64_C(1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-2), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(-1), INT64_C(-1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(-1), INT64_C(9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(-1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(1)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(0), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(-1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(1), INT64_C(1)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(1), INT64_C(2)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(1), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-2)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2), INT64_C(-1)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2), INT64_C(1)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(2), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2), INT64_C(3)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-3)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(3), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(3), INT64_C(-1)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(3), INT64_C(1)) == INT64_C(3));
  static_assert(tools::floor(INT64_C(3), INT64_C(2)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(3), INT64_C(4)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(3), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-4)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT64_C(-2)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4), INT64_C(-1)) == INT64_C(-4));
  static_assert(tools::floor(INT64_C(4), INT64_C(1)) == INT64_C(4));
  static_assert(tools::floor(INT64_C(4), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4), INT64_C(5)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-5)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(5), INT64_C(-4)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT64_C(-3)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(5), INT64_C(-2)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(5), INT64_C(-1)) == INT64_C(-5));
  static_assert(tools::floor(INT64_C(5), INT64_C(1)) == INT64_C(5));
  static_assert(tools::floor(INT64_C(5), INT64_C(2)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(5), INT64_C(3)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(4)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(5)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483646)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(5), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2147483646)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-3)) == INT64_C(-715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-2)) == INT64_C(-1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(-1)) == INT64_C(-2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(1)) == INT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483647)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483647)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(-1)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(1)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4)) == INT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483648)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483648)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-4)) == INT64_C(-536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-2)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(-1)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(1)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(3)) == INT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483649)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483649)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-3)) == INT64_C(-715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(-1)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(1)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(5)) == INT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(2147483650)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483650)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2147483646)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-5)) == INT64_C(-429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-4)) == INT64_C(-536870913));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-3)) == INT64_C(-715827884));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-2)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(-1)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(1)) == INT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2)) == INT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(3)) == INT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4)) == INT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(5)) == INT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483646)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483647)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967294)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4294967294)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483647)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-2)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(-1)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(1)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(3)) == INT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(5)) == INT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967295)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967295)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-5)) == INT64_C(-858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-3)) == INT64_C(-1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(-1)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(1)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4)) == INT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483648)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967296)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967296)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483648)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-4)) == INT64_C(-1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-2)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(-1)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(1)) == INT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967297)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967297)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(-1)) == INT64_C(-4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(1)) == INT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(3)) == INT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483649)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(4294967298)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967298)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967297)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967296)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967295)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4294967294)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483650)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483649)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483648)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483647)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2147483646)) == INT64_C(-3));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-5)) == INT64_C(-858993460));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-4)) == INT64_C(-1073741825));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-3)) == INT64_C(-1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-2)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(-1)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(1)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(3)) == INT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4)) == INT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(5)) == INT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483646)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483647)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483648)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483649)) == INT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(2147483650)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967294)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967295)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967296)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967297)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(4294967298)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(9223372036854775806)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-9223372036854775806)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967298)) == INT64_C(-2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4294967294)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483649)) == INT64_C(-4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483647)) == INT64_C(-4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-3)) == INT64_C(-3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-2)) == INT64_C(-4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(-1)) == INT64_C(-9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(1)) == INT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), INT64_C(9223372036854775807)) == INT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775807) - INT64_C(1)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775807)) == INT64_C(-1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-9223372036854775806)) == INT64_C(-2));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967298)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967297)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967296)) == INT64_C(-2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967295)) == INT64_C(-2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4294967294)) == INT64_C(-2147483650));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483650)) == INT64_C(-4294967293));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483649)) == INT64_C(-4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483648)) == INT64_C(-4294967296));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483647)) == INT64_C(-4294967299));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2147483646)) == INT64_C(-4294967301));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-5)) == INT64_C(-1844674407370955162));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-4)) == INT64_C(-2305843009213693952));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-3)) == INT64_C(-3074457345618258603));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-2)) == INT64_C(-4611686018427387904));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(-1)) == INT64_C(-9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(1)) == INT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2)) == INT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(3)) == INT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4)) == INT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(5)) == INT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483646)) == INT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483647)) == INT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483648)) == INT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483649)) == INT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(2147483650)) == INT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967294)) == INT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967295)) == INT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967296)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967297)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(4294967298)) == INT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(9223372036854775806)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), INT64_C(9223372036854775807)) == INT64_C(1));
  static_assert(tools::floor(INT64_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(INT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483647) - INT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(-1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), INT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT32_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), INT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), INT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT32_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT32_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT32_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT32_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT32_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775807) - INT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(-1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), INT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), INT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), INT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), INT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), INT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967297)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), INT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967297)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), INT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(1)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(0), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(1)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(1), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(1)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(3)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(1)) == UINT64_C(3));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(3), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(1)) == UINT64_C(4));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(5)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(1)) == UINT64_C(5));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(3)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(5)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483646)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(5), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(1)) == UINT64_C(2147483646));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483647)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483646), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(1)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4)) == UINT64_C(536870911));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483648)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483647), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(1)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(3)) == UINT64_C(715827882));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483649)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483648), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(1)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(5)) == UINT64_C(429496729));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(2147483650)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483649), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(1)) == UINT64_C(2147483650));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2)) == UINT64_C(1073741825));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(3)) == UINT64_C(715827883));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4)) == UINT64_C(536870912));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(5)) == UINT64_C(429496730));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483646)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483647)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967294)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(2147483650), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(1)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(3)) == UINT64_C(1431655764));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(5)) == UINT64_C(858993458));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967295)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967294), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(1)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4)) == UINT64_C(1073741823));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483648)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967296)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967295), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(1)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967297)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967296), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(1)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(3)) == UINT64_C(1431655765));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483649)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(4294967298)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967297), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(1)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(3)) == UINT64_C(1431655766));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4)) == UINT64_C(1073741824));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(5)) == UINT64_C(858993459));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483646)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483647)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483648)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483649)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(2147483650)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967294)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967295)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967296)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967297)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(4294967298)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775806)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(4294967298), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(1)) == UINT64_C(9223372036854775806));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775807)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775806), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(1)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4)) == UINT64_C(2305843009213693951));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483648)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967296)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775808)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775807), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(1)) == UINT64_C(9223372036854775808));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(3)) == UINT64_C(3074457345618258602));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775809)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775808), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(1)) == UINT64_C(9223372036854775809));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2)) == UINT64_C(4611686018427387904));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(5)) == UINT64_C(1844674407370955161));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(9223372036854775810)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775809), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(1)) == UINT64_C(9223372036854775810));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2)) == UINT64_C(4611686018427387905));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(3)) == UINT64_C(3074457345618258603));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4)) == UINT64_C(2305843009213693952));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(5)) == UINT64_C(1844674407370955162));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483646)) == UINT64_C(4294967300));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483647)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483648)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483649)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(2147483650)) == UINT64_C(4294967292));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967294)) == UINT64_C(2147483649));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967295)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967296)) == UINT64_C(2147483648));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967297)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(4294967298)) == UINT64_C(2147483647));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775806)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775807)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(18446744073709551614)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(9223372036854775810), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(1)) == UINT64_C(18446744073709551614));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(3)) == UINT64_C(6148914691236517204));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(5)) == UINT64_C(3689348814741910322));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967295)) == UINT64_C(4294967296));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967297)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(18446744073709551614)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551614), UINT64_C(18446744073709551615)) == UINT64_C(0));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(1)) == UINT64_C(18446744073709551615));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2)) == UINT64_C(9223372036854775807));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(3)) == UINT64_C(6148914691236517205));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4)) == UINT64_C(4611686018427387903));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(5)) == UINT64_C(3689348814741910323));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483646)) == UINT64_C(8589934600));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483647)) == UINT64_C(8589934596));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483648)) == UINT64_C(8589934591));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483649)) == UINT64_C(8589934588));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(2147483650)) == UINT64_C(8589934584));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967294)) == UINT64_C(4294967298));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967295)) == UINT64_C(4294967297));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967296)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967297)) == UINT64_C(4294967295));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(4294967298)) == UINT64_C(4294967294));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775806)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775807)) == UINT64_C(2));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775808)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775809)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(9223372036854775810)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(18446744073709551614)) == UINT64_C(1));
  static_assert(tools::floor(UINT64_C(18446744073709551615), UINT64_C(18446744073709551615)) == UINT64_C(1));

  return 0;
}
Back to top page