File: test-palette.c

package info (click to toggle)
gimp 3.0.4-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 210,076 kB
  • sloc: ansic: 842,287; lisp: 10,761; python: 10,318; cpp: 7,238; perl: 4,355; sh: 1,043; xml: 963; yacc: 609; lex: 348; javascript: 150; makefile: 43
file content (147 lines) | stat: -rw-r--r-- 6,812 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#define GIMP_TEST_PALETTE      "Bears"
#define GIMP_TEST_PALETTE_SIZE 256
#define GIMP_TEST_COLOR_IDX    3
#define GIMP_TEST_COLOR_FORMAT "R'G'B' u8"
#define GIMP_TEST_COLOR_R_U8   72
#define GIMP_TEST_COLOR_G_U8   56
#define GIMP_TEST_COLOR_B_U8   56
#define EPSILON                1e-6f

static GimpValueArray *
gimp_c_test_run (GimpProcedure        *procedure,
                 GimpRunMode           run_mode,
                 GimpImage            *image,
                 GimpDrawable        **drawables,
                 GimpProcedureConfig  *config,
                 gpointer              run_data)
{
  GimpPalette     *palette;
  GimpPalette     *palette2;
  GeglColor      **colors;
  gint             n_colors;
  guchar          *colormap;
  gfloat          *fcolormap;
  gint             n_colormap_colors;
  gsize            n_bytes;
  const Babl      *format;
  const Babl      *format2;
  gint             format_bpp;
  gint             format2_bpp;
  GeglColor       *color;
  guint8           rgb[3];
  gfloat           rgba[4];
  GimpValueArray  *retvals;

  GIMP_TEST_START("gimp_palette_get_by_name()")
  palette = gimp_palette_get_by_name (GIMP_TEST_PALETTE);
  GIMP_TEST_END(GIMP_IS_PALETTE (palette))

  GIMP_TEST_START("gimp_palette_get_by_name() is unique")
  palette2 = gimp_palette_get_by_name (GIMP_TEST_PALETTE);
  GIMP_TEST_END(GIMP_IS_PALETTE (palette2) && palette == palette2)

  GIMP_TEST_START("gimp_palette_get_color_count()")
  n_colors = gimp_palette_get_color_count (palette);
  GIMP_TEST_END(n_colors == GIMP_TEST_PALETTE_SIZE)

  GIMP_TEST_START("gimp_palette_get_colors()")
  colors = gimp_palette_get_colors (palette);
  GIMP_TEST_END(colors != NULL && gimp_color_array_get_length (colors) == GIMP_TEST_PALETTE_SIZE)

  GIMP_TEST_START("Checking fourth palette color's format")
  color = colors[GIMP_TEST_COLOR_IDX];
  format = gegl_color_get_format (color);
  GIMP_TEST_END(format == babl_format (GIMP_TEST_COLOR_FORMAT))

  GIMP_TEST_START("Checking fourth palette color's RGB components")
  gegl_color_get_pixel (color, format, rgb);
  GIMP_TEST_END(rgb[0] == GIMP_TEST_COLOR_R_U8 && rgb[1] == GIMP_TEST_COLOR_G_U8 && rgb[2] == GIMP_TEST_COLOR_B_U8)

  GIMP_TEST_START("gimp_palette_get_colormap()")
  colormap = gimp_palette_get_colormap (palette, format, &n_colormap_colors, &n_bytes);
  format_bpp = babl_format_get_bytes_per_pixel (format);
  GIMP_TEST_END(colormap != NULL && n_colormap_colors == n_colors &&
                n_colormap_colors * format_bpp == n_bytes)

  GIMP_TEST_START("Comparing fourth palette color's RGB components from colormap")
  GIMP_TEST_END(colormap[format_bpp * GIMP_TEST_COLOR_IDX] == GIMP_TEST_COLOR_R_U8     &&
                colormap[format_bpp * GIMP_TEST_COLOR_IDX + 1] == GIMP_TEST_COLOR_G_U8 &&
                colormap[format_bpp * GIMP_TEST_COLOR_IDX + 2]== GIMP_TEST_COLOR_B_U8)

  g_free (colormap);

  GIMP_TEST_START("gimp_palette_get_colormap() in \"R'G'B'A float\" format")
  format2     = babl_format ("RGBA float");
  format2_bpp = babl_format_get_bytes_per_pixel (format2);
  fcolormap   = (gfloat *) gimp_palette_get_colormap (palette, format2, &n_colormap_colors, &n_bytes);
  GIMP_TEST_END(fcolormap != NULL && n_colormap_colors == n_colors &&
                format2 != format                                  &&
                format2_bpp > format_bpp                           &&
                n_colormap_colors * format2_bpp == n_bytes)

  GIMP_TEST_START("Comparing fourth palette color's RGB components from colormap in float format")
  gegl_color_get_pixel (color, format2, rgba);
  /* XXX: whether to a colormap or to a GeglColor, I was expecting the
   * conversion from palette format to target format to be done through
   * exact same babl code path, hence equality to be perfect (i.e. no
   * epsilon needed for float comparison). This is true on my machine,
   * not on CI. Is it again some SSE2 inconsistency where sometimes
   * conversion goes to SSE2, sometimes not, for the same run and same
   * babl fish? Something else? To be further investigated.
   */
  GIMP_TEST_END(fabsf (fcolormap[4 * GIMP_TEST_COLOR_IDX] - rgba[0]) < EPSILON     &&
                fabsf (fcolormap[4 * GIMP_TEST_COLOR_IDX + 1] - rgba[1]) < EPSILON &&
                fabsf (fcolormap[4 * GIMP_TEST_COLOR_IDX + 2] - rgba[2]) < EPSILON)

  g_free (fcolormap);

  /* Run the same tests through PDB. */

  GIMP_TEST_START("gimp-palette-get-by-name")
  retvals = gimp_procedure_run (gimp_pdb_lookup_procedure (gimp_get_pdb (), "gimp-palette-get-by-name"),
                                "name", GIMP_TEST_PALETTE, NULL);
  GIMP_TEST_END(g_value_get_enum (gimp_value_array_index (retvals, 0)) == GIMP_PDB_SUCCESS)

  GIMP_TEST_START("gimp-palette-get-by-name and gimp_palette_get_by_name() get identical result")
  palette2 = g_value_get_object (gimp_value_array_index(retvals, 1));
  GIMP_TEST_END(GIMP_IS_PALETTE (palette2) && palette == palette2)

  gimp_value_array_unref (retvals);

  GIMP_TEST_START("gimp-palette-get-color-count")
  retvals = gimp_procedure_run (gimp_pdb_lookup_procedure (gimp_get_pdb (), "gimp-palette-get-color-count"),
                                "palette", palette, NULL);
  GIMP_TEST_END(g_value_get_enum (gimp_value_array_index (retvals, 0)) == GIMP_PDB_SUCCESS)

  GIMP_TEST_START("gimp-palette-get-color-count returns the right number of colors")
  n_colors = g_value_get_int (gimp_value_array_index (retvals, 1));
  GIMP_TEST_END(n_colors == GIMP_TEST_PALETTE_SIZE)

  gimp_value_array_unref (retvals);

  GIMP_TEST_START("gimp-palette-get-colors")
  retvals = gimp_procedure_run (gimp_pdb_lookup_procedure (gimp_get_pdb (), "gimp-palette-get-colors"),
                                "palette", palette, NULL);
  GIMP_TEST_END(g_value_get_enum (gimp_value_array_index (retvals, 0)) == GIMP_PDB_SUCCESS)

  GIMP_TEST_START("gimp-palette-get-colors returns GimpColorArray")
  colors = g_value_get_boxed (gimp_value_array_index (retvals, 1));
  GIMP_TEST_END(colors != NULL && gimp_color_array_get_length (colors) == GIMP_TEST_PALETTE_SIZE)

  GIMP_TEST_START("gimp_value_array_get_color_array()")
  colors = gimp_value_array_get_color_array (retvals, 1);
  GIMP_TEST_END(colors != NULL && gimp_color_array_get_length (colors) == GIMP_TEST_PALETTE_SIZE)

  GIMP_TEST_START("Checking fourth palette color's format (returned by PDB)")
  color = colors[GIMP_TEST_COLOR_IDX];
  format = gegl_color_get_format (color);
  GIMP_TEST_END(format == babl_format (GIMP_TEST_COLOR_FORMAT))

  GIMP_TEST_START("Checking fourth palette color's RGB values (returned by PDB)")
  gegl_color_get_pixel (color, format, rgb);
  GIMP_TEST_END(rgb[0] == GIMP_TEST_COLOR_R_U8 && rgb[1] == GIMP_TEST_COLOR_G_U8 && rgb[2] == GIMP_TEST_COLOR_B_U8)

  gimp_value_array_unref (retvals);

  GIMP_TEST_RETURN
}