util/format: add trivial srgb<->linear conversion test
authorEric Engestrom <eric.engestrom@intel.com>
Thu, 7 Nov 2019 17:33:19 +0000 (17:33 +0000)
committerEric Engestrom <eric.engestrom@intel.com>
Fri, 27 Dec 2019 21:04:43 +0000 (21:04 +0000)
This would've caught 8829f9ccb0267d113283 ("u_format: add ETC2 to
util_format_srgb/util_format_linear").

Suggested-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/util/meson.build
src/util/tests/format/meson.build [new file with mode: 0644]
src/util/tests/format/srgb.c [new file with mode: 0644]

index 88c6ab2d2a8f2d770705a63e981bdc9121a34cf1..3d9cb1bc7bd7824aaab93a50e080b74b4147403d 100644 (file)
@@ -287,4 +287,5 @@ if with_tests
   subdir('tests/vma')
   subdir('tests/set')
   subdir('tests/sparse_array')
+  subdir('tests/format')
 endif
diff --git a/src/util/tests/format/meson.build b/src/util/tests/format/meson.build
new file mode 100644 (file)
index 0000000..663bf69
--- /dev/null
@@ -0,0 +1,12 @@
+foreach t : ['srgb']
+  test(t,
+    executable(
+      t,
+      '@0@.c'.format(t),
+      include_directories : inc_common,
+      dependencies : idep_mesautil,
+    ),
+    suite : 'format',
+    should_fail : meson.get_cross_property('xfail', '').contains(t),
+  )
+endforeach
diff --git a/src/util/tests/format/srgb.c b/src/util/tests/format/srgb.c
new file mode 100644 (file)
index 0000000..9b3c15e
--- /dev/null
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "util/macros.h"
+#include "util/format/u_format.h"
+#include "pipe/p_format.h"
+
+int main(void)
+{
+   for (enum pipe_format format = 0; format < PIPE_FORMAT_COUNT; format++)
+   {
+      if (!util_format_is_srgb(format)) {
+         const enum pipe_format linear = util_format_linear(format);
+         if (format != linear) {
+            fprintf(stderr, "%s converted to linear is %s\n",
+                    util_format_name(format),
+                    util_format_name(linear));
+            return EXIT_FAILURE;
+         }
+         continue;
+      }
+
+      const enum pipe_format linear = util_format_linear(format);
+      if (format == linear) {
+         fprintf(stderr, "%s can't be converted to a linear equivalent\n",
+                 util_format_name(format));
+         return EXIT_FAILURE;
+      }
+
+      const enum pipe_format srgb = util_format_srgb(linear);
+      if (format != srgb) {
+         fprintf(stderr, "%s converted to linear and back to srgb becomes %s\n",
+                 util_format_name(format),
+                 util_format_name(srgb));
+         return EXIT_FAILURE;
+      }
+   }
+
+   return EXIT_SUCCESS;
+}