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
}
|