Skip to content

Instantly share code, notes, and snippets.

@martinmoene
Created March 7, 2014 12:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save martinmoene/9410391 to your computer and use it in GitHub Desktop.
Save martinmoene/9410391 to your computer and use it in GitHub Desktop.
std::between() an idea by Niels Dekker
// std::between() an idea by Niels Dekker
#include <functional>
namespace std {
template<class T>
bool between(T const& val, T const& lo, T const& hi)
{
return between( val, lo, hi, std::less<T>() );
}
template<class T, class Compare>
bool between(T const& val, T const& lo, T const& hi, Compare comp)
{
return comp(lo, val) && comp(val, hi);
}
}
#include <cassert>
#include <cstdlib>
#include <limits>
int main()
{
assert( std::between( rand(), 0, RAND_MAX ) );
assert( ! std::between( 2, 3, 7 ) );
assert( ! std::between( 3, 3, 7 ) );
assert( std::between( 4, 3, 7 ) );
assert( std::between( 5, 3, 7 ) );
assert( std::between( 6, 3, 7 ) );
assert( ! std::between( 7, 3, 7 ) );
assert( ! std::between( 8, 3, 7 ) );
assert( ! std::between( 2.0, 3.0, 7.0 ) );
assert( ! std::between( 3.0, 3.0, 7.0 ) );
assert( std::between( 4.0, 3.0, 7.0 ) );
assert( std::between( 5.0, 3.0, 7.0 ) );
assert( std::between( 6.0, 3.0, 7.0 ) );
assert( ! std::between( 7.0, 3.0, 7.0 ) );
assert( ! std::between( 8.0, 3.0, 7.0 ) );
assert( ! std::between( 1.0 - std::numeric_limits<double>::epsilon(), 1.0, 7.0 ) );
assert( ! std::between( 1.0 , 1.0, 7.0 ) );
assert( std::between( 1.0 + std::numeric_limits<double>::epsilon(), 1.0, 7.0 ) );
}
// cl -nologo -EHsc between.cpp && between
// g++ -Wall -Wextra -Weffc++ -std=c++11 -o between.exe between.cpp && between
@martinmoene
Copy link
Author

martinmoene commented Apr 26, 2021 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment