This is just the integer and pointer parts of std::midpoint.
The floating point bits and the lerp will come later.'
Details
Diff Detail
Event Timeline
libcxx/include/numeric | ||
---|---|---|
533 | Does const or volatile occur for by-value template parameters? | |
551 | Why the SFINAE? Just declare it midpoint(_Tp*, _Tp*) ? | |
libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.integer.pass.cpp | ||
28 | How about cases where the sum is odd? AKA 0, 3, 3, 0, 4, -1, and -1, 4). | |
31 | How about all these same tests but with -2 instead? |
libcxx/include/numeric | ||
---|---|---|
533 | I can remove that now that I realize that users are not supposed to explicitly list the template parameters. | |
551 | Because of this bad thing: midpoint<int>(0, 0) returns a int * Yes, I know that users are not supposed to do that, but this is easy prevention. | |
libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.integer.pass.cpp | ||
28 | I have more down below. |
Address Eric's comments.
Remove all the explicit template lists from the tests.
Add a couple "odd" tests.
Add a couple more failing pointer tests.
LGTM minus inline comments.
libcxx/include/numeric | ||
---|---|---|
529 | TODO on the floating point overloads? | |
549 | This overload isn't constexpr in the paper. | |
551 | The int case isn't quite right, but midpoint<long>(0, 0) triggers the bug you mention. Is there a test case? | |
553 | minpoint needs to be qualified. | |
libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.integer.pass.cpp | ||
32 | There's no reason why midpoint needs to be declared as a template. This test is non-portable. | |
65 | I think we need more constexpr test that try to tickle overflows and other boundary conditions to ensure we're constexpr in those cases as well. |
Landed as r356162
libcxx/include/numeric | ||
---|---|---|
553 | I changed this to be: return __a + _VSTD::midpoint(ptrdiff_t(0), __b - __a); |
libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.integer.pass.cpp | ||
---|---|---|
30 | I actually changed that before I committed. |
TODO on the floating point overloads?