E.g. if `ASSERT_EQ(myfunc(), 123)` fails, `myfunc()` would be invoked again to print the actual value.
This can cause confusion sometimes.
To avoid this, we cast arguments to double, which is wide enough for most cases and we provide a variant for 64 bit value types for when it's not.
We also perform a check and fail if argument to the check results in loss of precision.
CL: none
PUBLISHED_FROM=a14551289d92e8a5dead21d16471ebddebe938a8
To properly fail a test in a subroutine, return value needs to be passed up.
This snippet makes it short.
PUBLISHED_FROM=2f6328b5eb2921a4caa53d8887c02f73a5d817ea