Signed integers
assert(saturated!"+"(int.min, int.min) == int.min); assert(saturated!"+"(int.min, -42) == int.min); assert(saturated!"+"(int.min, +42) == int.min + 42); assert(saturated!"+"(int.min, int.max) == -1); assert(saturated!"+"(-42, int.min) == int.min); assert(saturated!"+"(+42, int.min) == int.min + 42); assert(saturated!"+"(-42, int.max) == int.max - 42); assert(saturated!"+"(+42, int.max) == int.max); assert(saturated!"+"(int.max, int.min) == -1); assert(saturated!"+"(int.max, -42) == int.max - 42); assert(saturated!"+"(int.max, +42) == int.max); assert(saturated!"+"(int.max, int.max) == int.max); assert(saturated!"-"(int.min, int.min) == 0); assert(saturated!"-"(int.min, -42) == int.min + 42); assert(saturated!"-"(int.min, +42) == int.min); assert(saturated!"-"(int.min, int.max) == int.min); assert(saturated!"-"(-42, int.min) == -42 - int.min); assert(saturated!"-"(+42, int.min) == int.max); assert(saturated!"-"(-42, int.max) == int.min); assert(saturated!"-"(+42, int.max) == 42 - int.max); assert(saturated!"-"(int.max, int.min) == int.max); assert(saturated!"-"(int.max, -42) == int.max); assert(saturated!"-"(int.max, +42) == int.max - 42); assert(saturated!"-"(int.max, int.max) == 0);
Unsigned integers
assert(saturated!"+"(uint.min, uint.min) == uint.min); assert(saturated!"+"(uint.min, 42u) == uint.min + 42); assert(saturated!"+"(uint.min, uint.max) == uint.max); assert(saturated!"+"(42u, uint.min) == uint.min + 42); assert(saturated!"+"(42u, uint.max) == uint.max); assert(saturated!"+"(uint.max, uint.min) == uint.max); assert(saturated!"+"(uint.max, 42u) == uint.max); assert(saturated!"+"(uint.max, uint.max) == uint.max); assert(saturated!"-"(uint.min, uint.min) == 0); assert(saturated!"-"(uint.min, 42u) == uint.min); assert(saturated!"-"(uint.min, uint.max) == uint.min); assert(saturated!"-"(42u, uint.min) == 42u); assert(saturated!"-"(42u, uint.max) == uint.min); assert(saturated!"-"(uint.max, uint.min) == uint.max); assert(saturated!"-"(uint.max, 42u) == uint.max - 42u); assert(saturated!"-"(uint.max, uint.max) == 0);
Operator assignment is also possible.
auto a = -42; assert(saturated!"-="(a, int.max) == a && a == int.min); auto b = 42u; assert(saturated!"-="(b, uint.max) == b && b == uint.min);
Saturated arithmetic on integers.