Mercurial > code
changeset 568:4d9cd83d821e
Misc: add clamp function
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 29 Jun 2016 19:02:56 +0200 |
parents | 4828eca0f78d |
children | b1c4933afcd0 |
files | CMakeLists.txt misc/CMakeLists.txt misc/clamp.hpp misc/test-all.cpp misc/test-clamp.cpp |
diffstat | 5 files changed, 128 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Wed Jun 29 14:50:32 2016 +0200 +++ b/CMakeLists.txt Wed Jun 29 19:02:56 2016 +0200 @@ -58,3 +58,5 @@ add_subdirectory(modules/unicode) add_subdirectory(modules/xdg) # add_subdirectory(modules/zip) + +add_subdirectory(misc)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/CMakeLists.txt Wed Jun 29 19:02:56 2016 +0200 @@ -0,0 +1,21 @@ +# +# CMakeLists.txt -- code building for common code +# +# Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +add_executable(test-misc test-all.cpp) +target_link_libraries(test-misc gtest) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/clamp.hpp Wed Jun 29 19:02:56 2016 +0200 @@ -0,0 +1,33 @@ +/* + * clamp.hpp -- clamp a value + * + * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <algorithm> + +/** + * Clamp the value between low and high. + * + * \param value the value + * \param low the minimum value + * \param high the maximum value + * \return the value between minimum and maximum + */ +template <typename T> +constexpr T clamp(T value, T low, T high) noexcept +{ + return (value < high) ? std::max(value, low) : std::min(value, high); +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/test-all.cpp Wed Jun 29 19:02:56 2016 +0200 @@ -0,0 +1,28 @@ +/* + * test-all.cpp -- test all functions + * + * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <gtest/gtest.h> + +#include "test-clamp.cpp" + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/test-clamp.cpp Wed Jun 29 19:02:56 2016 +0200 @@ -0,0 +1,44 @@ +/* + * test-clamp.cpp -- test clamp function + * + * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "clamp.hpp" + +TEST(Clamp, normal) +{ + ASSERT_EQ(5, clamp(5, 0, 10)); +} + +TEST(Clamp, minimum) +{ + ASSERT_EQ(0, clamp(0, 0, 10)); +} + +TEST(Clamp, maximum) +{ + ASSERT_EQ(10, clamp(10, 0, 10)); +} + +TEST(Clamp, less) +{ + ASSERT_EQ(0, clamp(-10, 0, 10)); +} + +TEST(Clamp, higher) +{ + ASSERT_EQ(10, clamp(20, 0, 10)); +}