aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/ramps.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ramps.c')
-rw-r--r--src/test/ramps.c115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/test/ramps.c b/src/test/ramps.c
new file mode 100644
index 0000000..cea86b8
--- /dev/null
+++ b/src/test/ramps.c
@@ -0,0 +1,115 @@
+/**
+ * libgamma -- Display server abstraction layer for gamma ramp adjustments
+ * Copyright (C) 2014 Mattias Andrée (maandree@member.fsf.org)
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "ramps.h"
+
+
+/**
+ * Test mapping function from [0, 1] float encoding value to [0, 2⁸ − 1] integer output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 2⁸ − 1] integer output value.
+ */
+uint8_t invert_ramps8(float encoding)
+{
+ double i_encoding = (double)(1.f - encoding);
+ double f_output = ((double)UINT8_MAX) * i_encoding;
+ uint8_t output = (uint8_t)f_output;
+ if ((i_encoding < (double)(0.25f)) && (output > UINT8_MAX / 2))
+ output = 0;
+ if ((i_encoding > (double)(0.75f)) && (output < UINT8_MAX / 2))
+ output = UINT8_MAX;
+ return output;
+}
+
+/**
+ * Test mapping function from [0, 1] float encoding value to [0, 2¹⁶ − 1] integer output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 2¹⁶ − 1] integer output value.
+ */
+uint16_t invert_ramps16(float encoding)
+{
+ double i_encoding = (double)(1.f - encoding);
+ double f_output = ((double)UINT16_MAX) * i_encoding;
+ uint16_t output = (uint16_t)f_output;
+ if ((i_encoding < (double)(0.25f)) && (output > UINT16_MAX / 2))
+ output = 0;
+ if ((i_encoding > (double)(0.75f)) && (output < UINT16_MAX / 2))
+ output = UINT16_MAX;
+ return output;
+}
+
+/**
+ * Test mapping function from [0, 1] float encoding value to [0, 2³² − 1] integer output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 2³² − 1] integer output value.
+ */
+uint32_t invert_ramps32(float encoding)
+{
+ double i_encoding = (double)(1.f - encoding);
+ double f_output = ((double)UINT32_MAX) * i_encoding;
+ uint32_t output = (uint32_t)f_output;
+ if ((i_encoding < (double)(0.25f)) && (output > UINT32_MAX / 2))
+ output = 0;
+ if ((i_encoding > (double)(0.75f)) && (output < UINT32_MAX / 2))
+ output = UINT32_MAX;
+ return output;
+}
+
+/**
+ * Test mapping function from [0, 1] float encoding value to [0, 2⁶⁴ − 1] integer output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 2⁶⁴ − 1] integer output value.
+ */
+uint64_t invert_ramps64(float encoding)
+{
+ double i_encoding = (double)(1.f - encoding);
+ double f_output = ((double)UINT64_MAX) * i_encoding;
+ uint64_t output = (uint64_t)f_output;
+ if ((i_encoding < (double)(0.25f)) && (output > UINT64_MAX / 2))
+ output = 0;
+ if ((i_encoding > (double)(0.75f)) && (output < UINT64_MAX / 2))
+ output = UINT64_MAX;
+ return output;
+}
+
+/**
+ * Test mapping function from [0, 1] float encoding value to [0, 1] float output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 1] float output value.
+ */
+float invert_rampsf(float encoding)
+{
+ return 1.f - encoding;
+}
+
+/**
+ * Test mapping function from [0, 1] double precision float encoding
+ * value to [0, 1] double precision float output value.
+ *
+ * @param encoding [0, 1] float encoding value.
+ * @return [0, 1] float output value.
+ */
+double invert_rampsd(double encoding)
+{
+ return ((double)1.f) - encoding;
+}
+