aboutsummaryrefslogtreecommitdiffstats
path: root/libfonts_unget_subpixel_order_class.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-01-07 23:40:55 +0100
committerMattias Andrée <maandree@kth.se>2023-01-07 23:40:55 +0100
commit4a7c500000af251d55919b7462599a67fc76c5bc (patch)
tree467c177dd2db091bd2789845859d9e8837c977a6 /libfonts_unget_subpixel_order_class.c
parentAdd textual descriptions of subpixel layouts (diff)
downloadlibfonts-4a7c500000af251d55919b7462599a67fc76c5bc.tar.gz
libfonts-4a7c500000af251d55919b7462599a67fc76c5bc.tar.bz2
libfonts-4a7c500000af251d55919b7462599a67fc76c5bc.tar.xz
Add tests
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libfonts_unget_subpixel_order_class.c')
-rw-r--r--libfonts_unget_subpixel_order_class.c168
1 files changed, 166 insertions, 2 deletions
diff --git a/libfonts_unget_subpixel_order_class.c b/libfonts_unget_subpixel_order_class.c
index 5fa9274..47d8366 100644
--- a/libfonts_unget_subpixel_order_class.c
+++ b/libfonts_unget_subpixel_order_class.c
@@ -1,5 +1,6 @@
/* See LICENSE file for copyright and license details. */
#include "common.h"
+#ifndef TEST
int
@@ -35,12 +36,12 @@ libfonts_unget_subpixel_order_class(enum libfonts_subpixel_order *orderp,
}
return 1;
- } else if (layout >= LIBFONTS_SUBPIXEL_ORDER_CLASS_11_23 || layout <= LIBFONTS_SUBPIXEL_ORDER_CLASS_BALANCED_13_12) {
+ } else if (layout >= LIBFONTS_SUBPIXEL_ORDER_CLASS_11_23 && layout <= LIBFONTS_SUBPIXEL_ORDER_CLASS_BALANCED_13_12) {
if (orderp) {
/* RGB, RBG, GRB, GBR, BRG, BGR */
i = (cell1 * 2) + (cell2 > cell3);
*orderp = i * 4 + (layout - LIBFONTS_SUBPIXEL_ORDER_CLASS_11_23) % 4 + LIBFONTS_SUBPIXEL_ORDER_RR_GB;
- *orderp = (layout >= LIBFONTS_SUBPIXEL_ORDER_CLASS_BALANCED_11_23) * 24;
+ *orderp += (layout >= LIBFONTS_SUBPIXEL_ORDER_CLASS_BALANCED_11_23) * 24;
}
return 1;
@@ -49,3 +50,166 @@ libfonts_unget_subpixel_order_class(enum libfonts_subpixel_order *orderp,
return -1;
}
}
+
+
+#else
+
+
+int
+main(void)
+{
+#define R LIBFONTS_SUBPIXEL_COLOUR_RED
+#define G LIBFONTS_SUBPIXEL_COLOUR_GREEN
+#define B LIBFONTS_SUBPIXEL_COLOUR_BLUE
+
+#define T(ORDER, LAYOUT, C1, C2, C3)\
+ T_(LIBFONTS_SUBPIXEL_ORDER_##ORDER,\
+ LIBFONTS_SUBPIXEL_ORDER_CLASS_##LAYOUT,\
+ C1, C2, C3)
+#define T_(ORDER, LAYOUT, C1, C2, C3)\
+ do {\
+ errno = 0;\
+ order = -1;\
+ ASSERT(libfonts_unget_subpixel_order_class(&order, LAYOUT, C1, C2, C3) == 1);\
+ ASSERT(order == ORDER);\
+ ASSERT(!errno);\
+ ASSERT(libfonts_unget_subpixel_order_class(NULL, LAYOUT, C1, C2, C3) == 1);\
+ ASSERT(!errno);\
+ } while (0)
+
+#define TU(LAYOUT, C1, C2, C3)\
+ TU_(LIBFONTS_SUBPIXEL_ORDER_CLASS_##LAYOUT, C1, C2, C3)
+#define TU_(LAYOUT, C1, C2, C3)\
+ do {\
+ errno = 0;\
+ order = -1;\
+ ASSERT(libfonts_unget_subpixel_order_class(&order, LAYOUT, C1, C2, C3) == 0);\
+ ASSERT(order == LIBFONTS_SUBPIXEL_ORDER_UNKNOWN);\
+ ASSERT(!errno);\
+ ASSERT(libfonts_unget_subpixel_order_class(NULL, LAYOUT, C1, C2, C3) == 0);\
+ ASSERT(!errno);\
+ } while (0)
+
+#define TE(LAYOUT, C1, C2, C3)\
+ TE_(LIBFONTS_SUBPIXEL_ORDER_CLASS_##LAYOUT, C1, C2, C3)
+#define TE_(LAYOUT, C1, C2, C3)\
+ do {\
+ errno = 0;\
+ ASSERT(libfonts_unget_subpixel_order_class(&order, LAYOUT, C1, C2, C3) == -1);\
+ ASSERT(errno == EINVAL);\
+ errno = 0;\
+ ASSERT(libfonts_unget_subpixel_order_class(NULL, LAYOUT, C1, C2, C3) == -1);\
+ ASSERT(errno == EINVAL);\
+ } while (0)
+
+ enum libfonts_subpixel_order order;
+
+ TU(OTHER, R, G, B);
+ TU(OTHER, G, B, R);
+ TU(OTHER, B, R, G);
+ TU(OTHER, R, B, G);
+ TU(OTHER, G, R, B);
+ TU(OTHER, B, G, R);
+
+ TE(OTHER, -1, G, B);
+ TE(OTHER, R, -1, B);
+ TE(OTHER, R, G, -1);
+ TE(OTHER, -1, -2, B);
+ TE(OTHER, 3, G, B);
+ TE(OTHER, R, 3, B);
+ TE(OTHER, R, G, 3);
+ TE(OTHER, R, 3, 4);
+ TE(123, -1, G, B);
+ TE(123, R, -1, B);
+ TE(123, R, G, -1);
+ TE(123, -1, -2, B);
+ TE(123, 3, G, B);
+ TE(123, R, 3, B);
+ TE(123, R, G, 3);
+ TE(123, R, 3, 4);
+ TE(123, R, R, G);
+ TE(123, R, G, R);
+ TE(123, R, G, G);
+ TE_(-1, R, G, B);
+ TE_(9999, R, G, B);
+
+ T(RGB, 123, R, G, B);
+ T(R_G_B, 1_2_3, R, G, B);
+ T(BGR, 123, B, G, R);
+ T(B_G_R, 1_2_3, B, G, R);
+
+ T(GBR, 123, G, B, R);
+ T(G_B_R, 1_2_3, G, B, R);
+ T(RBG, 123, R, B, G);
+ T(R_B_G, 1_2_3, R, B, G);
+
+ T(BRG, 123, B, R, G);
+ T(B_R_G, 1_2_3, B, R, G);
+ T(GRB, 123, G, R, B);
+ T(G_R_B, 1_2_3, G, R, B);
+
+ T(RR_GB, 11_23, R, G, B);
+ T(GR_BR, 21_31, R, G, B);
+ T(BG_RR, 32_11, R, G, B);
+ T(RB_RG, 13_12, R, G, B);
+
+ T(RR_BG, 11_23, R, B, G);
+ T(BR_GR, 21_31, R, B, G);
+ T(GB_RR, 32_11, R, B, G);
+ T(RG_RB, 13_12, R, B, G);
+
+ T(GG_RB, 11_23, G, R, B);
+ T(RG_BG, 21_31, G, R, B);
+ T(BR_GG, 32_11, G, R, B);
+ T(GB_GR, 13_12, G, R, B);
+
+ T(GG_BR, 11_23, G, B, R);
+ T(BG_RG, 21_31, G, B, R);
+ T(RB_GG, 32_11, G, B, R);
+ T(GR_GB, 13_12, G, B, R);
+
+ T(BB_RG, 11_23, B, R, G);
+ T(RB_GB, 21_31, B, R, G);
+ T(GR_BB, 32_11, B, R, G);
+ T(BG_BR, 13_12, B, R, G);
+
+ T(BB_GR, 11_23, B, G, R);
+ T(GB_RB, 21_31, B, G, R);
+ T(RG_BB, 32_11, B, G, R);
+ T(BR_BG, 13_12, B, G, R);
+
+ T(BALANCED_RR_GB, BALANCED_11_23, R, G, B);
+ T(BALANCED_GR_BR, BALANCED_21_31, R, G, B);
+ T(BALANCED_BG_RR, BALANCED_32_11, R, G, B);
+ T(BALANCED_RB_RG, BALANCED_13_12, R, G, B);
+
+ T(BALANCED_RR_BG, BALANCED_11_23, R, B, G);
+ T(BALANCED_BR_GR, BALANCED_21_31, R, B, G);
+ T(BALANCED_GB_RR, BALANCED_32_11, R, B, G);
+ T(BALANCED_RG_RB, BALANCED_13_12, R, B, G);
+
+ T(BALANCED_GG_RB, BALANCED_11_23, G, R, B);
+ T(BALANCED_RG_BG, BALANCED_21_31, G, R, B);
+ T(BALANCED_BR_GG, BALANCED_32_11, G, R, B);
+ T(BALANCED_GB_GR, BALANCED_13_12, G, R, B);
+
+ T(BALANCED_GG_BR, BALANCED_11_23, G, B, R);
+ T(BALANCED_BG_RG, BALANCED_21_31, G, B, R);
+ T(BALANCED_RB_GG, BALANCED_32_11, G, B, R);
+ T(BALANCED_GR_GB, BALANCED_13_12, G, B, R);
+
+ T(BALANCED_BB_RG, BALANCED_11_23, B, R, G);
+ T(BALANCED_RB_GB, BALANCED_21_31, B, R, G);
+ T(BALANCED_GR_BB, BALANCED_32_11, B, R, G);
+ T(BALANCED_BG_BR, BALANCED_13_12, B, R, G);
+
+ T(BALANCED_BB_GR, BALANCED_11_23, B, G, R);
+ T(BALANCED_GB_RB, BALANCED_21_31, B, G, R);
+ T(BALANCED_RG_BB, BALANCED_32_11, B, G, R);
+ T(BALANCED_BR_BG, BALANCED_13_12, B, G, R);
+
+ return 0;
+}
+
+
+#endif