aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/test/ramps.c115
-rw-r--r--src/test/ramps.h59
-rw-r--r--src/test/test.c105
4 files changed, 175 insertions, 106 deletions
diff --git a/Makefile b/Makefile
index 65dfe80..6e7f803 100644
--- a/Makefile
+++ b/Makefile
@@ -73,7 +73,7 @@ HEADERS_INFO = libgamma-error libgamma-facade libgamma-method
HEADERS = libgamma libgamma-config $(HEADERS_INFO)
# Object files for the test.
-TESTOBJ = test methods errors crtcinfo user
+TESTOBJ = test methods errors crtcinfo user ramps
# The version of the library.
LIB_MAJOR = 0
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;
+}
+
diff --git a/src/test/ramps.h b/src/test/ramps.h
index 050ac59..5ea2844 100644
--- a/src/test/ramps.h
+++ b/src/test/ramps.h
@@ -19,6 +19,14 @@
#define LIBGAMMA_TEST_RAMPS_H
+#include <stdint.h>
+
+
+#ifndef __GCC__
+# define __attribute__(x)
+#endif
+
+
/**
* X macros of all integer gamma ramps
*/
@@ -39,5 +47,56 @@
preserved exactly on exit, and we assume RandR X is used. */
+
+/**
+ * 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) __attribute__((const));
+
+/**
+ * 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) __attribute__((const));
+
+/**
+ * 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) __attribute__((const));
+
+/**
+ * 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) __attribute__((const));
+
+/**
+ * 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) __attribute__((const));
+
+/**
+ * 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) __attribute__((const));
+
+
#endif
diff --git a/src/test/test.c b/src/test/test.c
index 44c55c2..ef6e7e2 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -30,106 +30,6 @@
#include <stdint.h>
-#ifndef __GCC__
-# define __attribute__(x)
-#endif
-
-/**
- * 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.
- */
-static uint8_t __attribute__((const)) 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.
- */
-static uint16_t __attribute__((const)) 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.
- */
-static uint32_t __attribute__((const)) 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.
- */
-static uint64_t __attribute__((const)) 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.
- */
-static float __attribute__((const)) 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.
- */
-static double __attribute__((const)) invert_rampsd(double encoding)
-{
- return ((double)1.f) - encoding;
-}
-
-
/**
* Test `libgamma`
@@ -260,8 +160,3 @@ int main(void)
return rr;
}
-
-#ifndef __GCC__
-# undef __attribute__
-#endif
-