test_id,test_name,source_space,target_space,input_r,input_g,input_b,expected_1,expected_2,expected_3,tolerance,edge_case,description 1,rgb_to_grayscale_white,RGB,Grayscale,255,255,255,255,255,255,0,normal,"Pure white to grayscale" 2,rgb_to_grayscale_black,RGB,Grayscale,0,0,0,0,0,0,0,normal,"Pure black to grayscale" 3,rgb_to_grayscale_red,RGB,Grayscale,255,0,0,76,76,76,1,normal,"Pure red luminosity method" 4,rgb_to_grayscale_green,RGB,Grayscale,0,255,0,149,149,149,1,normal,"Pure green luminosity method" 5,rgb_to_grayscale_blue,RGB,Grayscale,0,0,255,29,29,29,1,normal,"Pure blue luminosity method" 6,rgb_to_grayscale_mid,RGB,Grayscale,128,128,128,128,128,128,1,normal,"Mid gray to grayscale" 7,rgb_to_grayscale_orange,RGB,Grayscale,255,165,0,166,166,166,2,normal,"Orange to grayscale" 8,rgb_to_grayscale_cyan,RGB,Grayscale,0,255,255,178,178,178,2,normal,"Cyan to grayscale" 9,rgb_to_grayscale_magenta,RGB,Grayscale,255,0,255,105,105,105,2,normal,"Magenta to grayscale" 10,rgb_to_grayscale_yellow,RGB,Grayscale,255,255,0,226,226,226,2,normal,"Yellow to grayscale" 11,rgb_to_hsv_white,RGB,HSV,255,255,255,0,0,100,1,boundary,"White - undefined hue" 12,rgb_to_hsv_black,RGB,HSV,0,0,0,0,0,0,1,boundary,"Black - undefined hue" 13,rgb_to_hsv_red,RGB,HSV,255,0,0,0,100,100,1,normal,"Pure red" 14,rgb_to_hsv_green,RGB,HSV,0,255,0,120,100,100,1,normal,"Pure green" 15,rgb_to_hsv_blue,RGB,HSV,0,0,255,240,100,100,1,normal,"Pure blue" 16,rgb_to_hsv_yellow,RGB,HSV,255,255,0,60,100,100,1,normal,"Pure yellow" 17,rgb_to_hsv_cyan,RGB,HSV,0,255,255,180,100,100,1,normal,"Pure cyan" 18,rgb_to_hsv_magenta,RGB,HSV,255,0,255,300,100,100,1,normal,"Pure magenta" 19,rgb_to_hsv_orange,RGB,HSV,255,128,0,30,100,100,2,normal,"Orange color" 20,rgb_to_hsv_gray,RGB,HSV,128,128,128,0,0,50,2,boundary,"Gray - undefined hue" 21,rgb_to_hsv_dark_red,RGB,HSV,128,0,0,0,100,50,2,normal,"Dark red" 22,rgb_to_hsv_light_red,RGB,HSV,255,128,128,0,50,100,2,normal,"Light red (pink)" 23,hsv_to_rgb_red,HSV,RGB,0,100,100,255,0,0,1,normal,"HSV red to RGB" 24,hsv_to_rgb_green,HSV,RGB,120,100,100,0,255,0,1,normal,"HSV green to RGB" 25,hsv_to_rgb_blue,HSV,RGB,240,100,100,0,0,255,1,normal,"HSV blue to RGB" 26,hsv_to_rgb_yellow,HSV,RGB,60,100,100,255,255,0,1,normal,"HSV yellow to RGB" 27,hsv_to_rgb_cyan,HSV,RGB,180,100,100,0,255,255,1,normal,"HSV cyan to RGB" 28,hsv_to_rgb_magenta,HSV,RGB,300,100,100,255,0,255,1,normal,"HSV magenta to RGB" 29,hsv_to_rgb_white,HSV,RGB,0,0,100,255,255,255,1,boundary,"HSV white to RGB" 30,hsv_to_rgb_black,HSV,RGB,0,0,0,0,0,0,1,boundary,"HSV black to RGB" 31,hsv_to_rgb_half_sat,HSV,RGB,0,50,100,255,128,128,2,normal,"50% saturated red" 32,hsv_to_rgb_half_val,HSV,RGB,0,100,50,128,0,0,2,normal,"50% value red" 33,rgb_to_hsl_white,RGB,HSL,255,255,255,0,0,100,1,boundary,"White to HSL" 34,rgb_to_hsl_black,RGB,HSL,0,0,0,0,0,0,1,boundary,"Black to HSL" 35,rgb_to_hsl_red,RGB,HSL,255,0,0,0,100,50,1,normal,"Pure red to HSL" 36,rgb_to_hsl_green,RGB,HSL,0,255,0,120,100,50,1,normal,"Pure green to HSL" 37,rgb_to_hsl_blue,RGB,HSL,0,0,255,240,100,50,1,normal,"Pure blue to HSL" 38,rgb_to_hsl_yellow,RGB,HSL,255,255,0,60,100,50,1,normal,"Yellow to HSL" 39,rgb_to_hsl_gray,RGB,HSL,128,128,128,0,0,50,2,boundary,"Gray to HSL" 40,rgb_to_hsl_pink,RGB,HSL,255,192,203,350,100,88,3,normal,"Pink to HSL" 41,hsl_to_rgb_red,HSL,RGB,0,100,50,255,0,0,1,normal,"HSL red to RGB" 42,hsl_to_rgb_green,HSL,RGB,120,100,50,0,255,0,1,normal,"HSL green to RGB" 43,hsl_to_rgb_blue,HSL,RGB,240,100,50,0,0,255,1,normal,"HSL blue to RGB" 44,hsl_to_rgb_white,HSL,RGB,0,0,100,255,255,255,1,boundary,"HSL white to RGB" 45,hsl_to_rgb_black,HSL,RGB,0,0,0,0,0,0,1,boundary,"HSL black to RGB" 46,hsl_to_rgb_light_blue,HSL,RGB,200,100,75,128,191,255,3,normal,"Light blue from HSL" 47,rgb_to_xyz_white,RGB,XYZ,255,255,255,95.047,100.0,108.883,1,normal,"D65 white point" 48,rgb_to_xyz_black,RGB,XYZ,0,0,0,0,0,0,0.1,boundary,"Black to XYZ" 49,rgb_to_xyz_red,RGB,XYZ,255,0,0,41.24,21.26,1.93,1,normal,"sRGB red to XYZ" 50,rgb_to_xyz_green,RGB,XYZ,0,255,0,35.76,71.52,11.92,1,normal,"sRGB green to XYZ" 51,rgb_to_xyz_blue,RGB,XYZ,0,0,255,18.05,7.22,95.05,1,normal,"sRGB blue to XYZ" 52,xyz_to_rgb_white,XYZ,RGB,95.047,100.0,108.883,255,255,255,2,normal,"D65 white to sRGB" 53,xyz_to_rgb_black,XYZ,RGB,0,0,0,0,0,0,1,boundary,"XYZ black to sRGB" 54,rgb_to_lab_white,RGB,LAB,255,255,255,100,0,0,1,normal,"White to L*a*b*" 55,rgb_to_lab_black,RGB,LAB,0,0,0,0,0,0,0.5,boundary,"Black to L*a*b*" 56,rgb_to_lab_red,RGB,LAB,255,0,0,53.23,80.11,67.22,2,normal,"Red to L*a*b*" 57,rgb_to_lab_green,RGB,LAB,0,255,0,87.74,-86.18,83.18,2,normal,"Green to L*a*b*" 58,rgb_to_lab_blue,RGB,LAB,0,0,255,32.30,79.20,-107.86,2,normal,"Blue to L*a*b*" 59,rgb_to_lab_gray,RGB,LAB,128,128,128,53.59,0,0,1,normal,"Mid gray to L*a*b*" 60,lab_to_rgb_white,LAB,RGB,100,0,0,255,255,255,2,normal,"L*a*b* white to RGB" 61,lab_to_rgb_black,LAB,RGB,0,0,0,0,0,0,2,boundary,"L*a*b* black to RGB" 62,lab_to_rgb_red,LAB,RGB,53.23,80.11,67.22,255,0,0,3,normal,"L*a*b* red to RGB" 63,rgb_to_ycbcr_white,RGB,YCbCr,255,255,255,255,128,128,2,normal,"White to YCbCr" 64,rgb_to_ycbcr_black,RGB,YCbCr,0,0,0,0,128,128,2,boundary,"Black to YCbCr" 65,rgb_to_ycbcr_red,RGB,YCbCr,255,0,0,76,84,255,3,normal,"Red to YCbCr" 66,rgb_to_ycbcr_green,RGB,YCbCr,0,255,0,150,43,21,3,normal,"Green to YCbCr" 67,rgb_to_ycbcr_blue,RGB,YCbCr,0,0,255,29,255,107,3,normal,"Blue to YCbCr" 68,ycbcr_to_rgb_white,YCbCr,RGB,255,128,128,255,255,255,3,normal,"YCbCr white to RGB" 69,ycbcr_to_rgb_black,YCbCr,RGB,0,128,128,0,0,0,3,boundary,"YCbCr black to RGB" 70,ycbcr_to_rgb_red,YCbCr,RGB,76,84,255,255,0,0,5,normal,"YCbCr red to RGB" 71,brightness_increase_mid,RGB,RGB,128,128,128,178,178,178,0,normal,"Brightness +50" 72,brightness_decrease_mid,RGB,RGB,128,128,128,78,78,78,0,normal,"Brightness -50" 73,brightness_clamp_high,RGB,RGB,230,230,230,255,255,255,0,clamp,"Clamp to 255" 74,brightness_clamp_low,RGB,RGB,20,20,20,0,0,0,0,clamp,"Clamp to 0" 75,contrast_increase_mid,RGB,RGB,128,128,128,128,128,128,1,normal,"Contrast center unchanged" 76,contrast_increase_light,RGB,RGB,192,192,192,224,224,224,2,normal,"Contrast 1.5x light" 77,contrast_increase_dark,RGB,RGB,64,64,64,32,32,32,2,normal,"Contrast 1.5x dark" 78,contrast_decrease,RGB,RGB,192,64,128,160,96,128,3,normal,"Contrast 0.5x" 79,gamma_brighten,RGB,RGB,128,128,128,187,187,187,2,normal,"Gamma 0.5 (brighten)" 80,gamma_darken,RGB,RGB,128,128,128,64,64,64,2,normal,"Gamma 2.0 (darken)" 81,gamma_white,RGB,RGB,255,255,255,255,255,255,0,boundary,"Gamma on white" 82,gamma_black,RGB,RGB,0,0,0,0,0,0,0,boundary,"Gamma on black" 83,saturation_increase,RGB,RGB,200,100,150,233,67,150,5,normal,"Saturation 1.5x" 84,saturation_decrease,RGB,RGB,200,100,150,175,125,150,5,normal,"Saturation 0.5x" 85,saturation_zero,RGB,RGB,200,100,150,150,150,150,3,normal,"Desaturate completely" 86,saturation_max,RGB,RGB,150,100,130,200,50,130,10,normal,"Max saturation" 87,hue_shift_90,RGB,RGB,255,0,0,128,255,0,5,normal,"Red -> Yellow-Green" 88,hue_shift_180,RGB,RGB,255,0,0,0,255,255,5,normal,"Red -> Cyan" 89,hue_shift_270,RGB,RGB,255,0,0,128,0,255,5,normal,"Red -> Purple" 90,invert_white,RGB,RGB,255,255,255,0,0,0,0,boundary,"Invert white" 91,invert_black,RGB,RGB,0,0,0,255,255,255,0,boundary,"Invert black" 92,invert_red,RGB,RGB,255,0,0,0,255,255,0,normal,"Invert red" 93,invert_mid,RGB,RGB,128,64,192,127,191,63,0,normal,"Invert arbitrary" 94,sepia_gray,RGB,RGB,128,128,128,162,144,112,3,normal,"Sepia on gray" 95,sepia_full,RGB,RGB,255,128,64,226,200,156,5,normal,"Sepia on color" 96,threshold_below,RGB,RGB,100,100,100,0,0,0,0,normal,"Below threshold -> black" 97,threshold_above,RGB,RGB,200,200,200,255,255,255,0,normal,"Above threshold -> white" 98,threshold_at,RGB,RGB,128,128,128,255,255,255,0,boundary,"At threshold -> white" 99,posterize_4,RGB,RGB,128,64,192,128,64,192,20,normal,"4-level posterize" 100,posterize_2,RGB,RGB,100,200,50,0,255,0,0,normal,"2-level (binary)"