test_id,transform_type,input_width,input_height,param1,param2,param3,expected_width,expected_height,sample_x,sample_y,expected_x,expected_y,interpolation,tolerance,description 1,scale_up,100,100,2.0,0,0,200,200,50,50,100,100,nearest,0,"2x scale center point" 2,scale_up,100,100,2.0,0,0,200,200,0,0,0,0,nearest,0,"2x scale corner" 3,scale_up,100,100,2.0,0,0,200,200,99,99,198,198,nearest,1,"2x scale opposite corner" 4,scale_down,200,200,0.5,0,0,100,100,100,100,50,50,nearest,0,"0.5x scale center" 5,scale_down,200,200,0.5,0,0,100,100,198,198,99,99,nearest,1,"0.5x scale corner" 6,scale_bilinear,100,100,2.0,0,0,200,200,50,50,100,100,bilinear,0.01,"Bilinear 2x center" 7,scale_bilinear,100,100,2.0,0,0,200,200,25,75,50,150,bilinear,0.01,"Bilinear 2x arbitrary" 8,scale_bicubic,100,100,2.0,0,0,200,200,50,50,100,100,bicubic,0.02,"Bicubic 2x center" 9,scale_arbitrary,640,480,800,600,0,800,600,320,240,400,300,bilinear,1,"Arbitrary resize" 10,scale_aspect,800,600,400,0,0,400,300,400,300,200,150,bilinear,1,"Preserve aspect ratio" 11,rotate_90cw,100,100,90,0,0,100,100,0,0,99,0,nearest,0,"90° clockwise (0,0)->corner" 12,rotate_90cw,100,100,90,0,0,100,100,50,50,50,50,nearest,1,"90° clockwise center" 13,rotate_90cw,100,100,90,0,0,100,100,99,0,99,99,nearest,1,"90° clockwise corner" 14,rotate_90ccw,100,100,-90,0,0,100,100,0,0,0,99,nearest,0,"90° counter-clockwise" 15,rotate_180,100,100,180,0,0,100,100,0,0,99,99,nearest,0,"180° rotation" 16,rotate_180,100,100,180,0,0,100,100,50,50,49,49,nearest,1,"180° near center" 17,rotate_270,100,100,270,0,0,100,100,0,0,0,99,nearest,0,"270° same as -90°" 18,rotate_45,100,100,45,0,0,142,142,50,50,71,71,bilinear,2,"45° expands image" 19,rotate_30,100,100,30,0,0,137,137,50,50,68,68,bilinear,3,"30° rotation" 20,rotate_arbitrary,100,100,15,0,0,117,117,50,50,58,58,bilinear,3,"15° small rotation" 21,flip_h,100,100,0,0,0,100,100,0,50,99,50,nearest,0,"Horizontal flip" 22,flip_h,100,100,0,0,0,100,100,25,25,74,25,nearest,0,"H flip arbitrary" 23,flip_v,100,100,0,0,0,100,100,50,0,50,99,nearest,0,"Vertical flip" 24,flip_v,100,100,0,0,0,100,100,25,25,25,74,nearest,0,"V flip arbitrary" 25,flip_both,100,100,0,0,0,100,100,0,0,99,99,nearest,0,"Both flips = 180°" 26,crop,200,200,50,50,100,100,100,0,0,50,50,nearest,0,"Crop from center" 27,crop,200,200,0,0,100,100,100,50,50,50,50,nearest,0,"Crop top-left" 28,crop,200,200,100,100,100,100,100,50,50,150,150,nearest,0,"Crop bottom-right" 29,translate_pos,100,100,10,20,0,100,100,50,50,40,30,nearest,0,"Translate left-up" 30,translate_neg,100,100,-10,-20,0,100,100,50,50,60,70,nearest,0,"Translate right-down" 31,shear_h,100,100,0.2,0,0,120,100,50,50,60,50,bilinear,1,"Horizontal shear" 32,shear_v,100,100,0,0.2,0,100,120,50,50,50,60,bilinear,1,"Vertical shear" 33,shear_both,100,100,0.1,0.1,0,110,110,50,50,55,55,bilinear,2,"Combined shear" 34,interpolate_nn_edge,100,100,0,0,0,100,100,0.5,0.5,0,0,nearest,0,"Nearest at sub-pixel" 35,interpolate_nn_center,100,100,0,0,0,100,100,50.4,50.4,50,50,nearest,0,"Nearest rounds down" 36,interpolate_bilinear,100,100,0,0,0,100,100,50.5,50.5,50.5,50.5,bilinear,0,"Bilinear exact" 37,interpolate_bicubic,100,100,0,0,0,100,100,50.25,50.75,50.25,50.75,bicubic,0,"Bicubic sub-pixel" 38,affine_identity,100,100,1,0,0,100,100,50,50,50,50,bilinear,0,"Identity transform" 39,affine_scale,100,100,2,0,0,200,200,25,25,50,50,bilinear,1,"Affine scale 2x" 40,affine_rotate,100,100,0.707,-0.707,0.707,142,142,50,50,71,71,bilinear,2,"Affine 45° rotate" 41,perspective_simple,100,100,0,0,0.001,100,100,50,50,50.25,50.25,bilinear,1,"Simple perspective" 42,perspective_strong,100,100,0,0,0.005,100,100,50,50,52,52,bilinear,3,"Strong perspective" 43,barrel_dist,100,100,0.2,0,0,100,100,50,25,50,20,bilinear,3,"Barrel distortion" 44,pincushion_dist,100,100,-0.2,0,0,100,100,50,25,50,28,bilinear,3,"Pincushion" 45,fisheye,100,100,0.5,0,0,100,100,50,25,50,18,bilinear,5,"Fisheye effect" 46,polar_to_cart,100,100,0,0,0,100,100,50,50,50,50,bilinear,1,"Center unchanged" 47,polar_to_cart,100,100,0,0,0,100,100,75,50,75,50,bilinear,2,"Edge right" 48,cart_to_polar,100,100,0,0,0,100,100,50,50,50,50,bilinear,1,"Center unchanged" 49,mirror_h,100,100,0,0,0,200,100,25,25,25,25,nearest,0,"Mirror creates double width" 50,mirror_v,100,100,0,0,0,100,200,25,25,25,25,nearest,0,"Mirror creates double height" 51,tile_2x2,100,100,2,2,0,200,200,150,150,50,50,nearest,0,"Tile pattern repeats" 52,tile_3x3,100,100,3,3,0,300,300,250,250,50,50,nearest,0,"3x3 tiling" 53,pad_center,100,100,50,50,0,200,200,100,100,50,50,nearest,0,"Pad centers original" 54,border_add,100,100,10,0,0,120,120,60,60,50,50,nearest,0,"Add 10px border" 55,scale_lanczos,100,100,2.0,0,0,200,200,50,50,100,100,lanczos,0.02,"Lanczos 2x" 56,scale_lanczos,100,100,3.0,0,0,300,300,50,50,150,150,lanczos,0.02,"Lanczos 3x" 57,rotate_center_pivot,100,100,45,50,50,100,100,50,50,50,50,bilinear,1,"Rotate around center" 58,rotate_corner_pivot,100,100,90,0,0,100,100,50,50,50,50,bilinear,2,"Rotate around corner" 59,scale_down_nn,1000,1000,0.1,0,0,100,100,500,500,50,50,nearest,0,"10x downscale" 60,scale_down_bilinear,1000,1000,0.1,0,0,100,100,500,500,50,50,bilinear,0.1,"10x downscale bilinear" 61,rotate_45_crop,100,100,45,0,0,71,71,35,35,35,35,bilinear,2,"45° with auto-crop" 62,aspect_fit,1920,1080,800,800,0,800,450,960,540,400,225,bilinear,1,"Fit in 800x800" 63,aspect_fill,1920,1080,800,800,0,1422,800,960,540,711,400,bilinear,5,"Fill 800x800" 64,seam_carve_h,200,100,150,100,0,150,100,100,50,75,50,nearest,5,"Content-aware width" 65,seam_carve_v,100,200,100,150,0,100,150,50,100,50,75,nearest,5,"Content-aware height" 66,homography_rect,100,100,0.9,0.1,-5,100,100,50,50,45,55,bilinear,5,"Quadrilateral warp" 67,quad_warp,100,100,0,5,-5,100,100,50,50,48,52,bilinear,3,"4-corner warp" 68,cylindrical_proj,100,100,0.01,0,0,100,100,50,50,50,50,bilinear,2,"Cylindrical projection" 69,spherical_proj,100,100,0.01,0,0,100,100,50,50,50,50,bilinear,3,"Spherical projection" 70,reflect_h,100,100,0,0.5,0,100,150,50,100,50,49,bilinear,2,"Reflection with fade" 71,edge_wrap,100,100,0,0,0,100,100,-5,50,95,50,nearest,0,"Wrap around edges" 72,edge_clamp,100,100,0,0,0,100,100,-5,50,0,50,nearest,0,"Clamp to edge" 73,edge_reflect,100,100,0,0,0,100,100,-5,50,5,50,nearest,0,"Reflect at edge" 74,edge_black,100,100,0,0,0,100,100,-5,50,0,0,nearest,0,"Black outside" 75,rotate_expand,50,100,90,0,0,100,50,25,50,50,25,nearest,0,"Rotation swaps dimensions" 76,scale_non_uniform,100,100,2.0,0.5,0,200,50,50,50,100,25,bilinear,1,"Non-uniform scale" 77,translate_wrap,100,100,50,0,1,100,100,75,50,25,50,nearest,0,"Translate with wrap" 78,rotate_bilinear_aa,100,100,22.5,0,0,108,108,50,50,54,54,bilinear,2,"Antialiased rotation" 79,thin_plate_spline,100,100,0,0,0,100,100,50,50,52,48,bilinear,5,"TPS warp" 80,mesh_warp,100,100,4,4,0,100,100,50,50,48,52,bilinear,5,"Mesh-based warp" 81,zoom_center,100,100,1.5,50,50,100,100,50,50,50,50,bilinear,1,"Zoom to center" 82,zoom_corner,100,100,1.5,0,0,100,100,50,50,33,33,bilinear,3,"Zoom to corner" 83,rotate_bicubic_45,100,100,45,0,0,142,142,50,50,71,71,bicubic,2,"Bicubic 45° rotation" 84,scale_mitchell,100,100,2.0,0,0,200,200,50,50,100,100,mitchell,0.02,"Mitchell filter" 85,subsample_2x,100,100,0.5,0,0,50,50,50,50,25,25,area,0,"Area averaging downsample" 86,supersample_2x,100,100,2.0,0,0,200,200,50,50,100,100,area,0,"Area averaging upsample" 87,rotate_nn_90,512,512,90,0,0,512,512,256,256,256,256,nearest,0,"Large 90° exact" 88,rotate_nn_180,512,512,180,0,0,512,512,256,256,255,255,nearest,1,"Large 180° exact" 89,scale_exact_3x,100,100,3.0,0,0,300,300,50,50,150,150,nearest,0,"Exact 3x scale" 90,scale_exact_4x,100,100,4.0,0,0,400,400,50,50,200,200,nearest,0,"Exact 4x scale" 91,rotate_30_bilinear,200,200,30,0,0,273,273,100,100,136,136,bilinear,3,"Larger 30° rotation" 92,affine_general,100,100,1.2,0.3,-0.2,130,130,50,50,68,48,bilinear,3,"General affine" 93,perspective_keystone,100,100,0.002,-0.001,0,100,100,50,50,51,49,bilinear,3,"Keystone correction" 94,lens_correct_k1,100,100,-0.1,0,0,100,100,50,25,50,27,bilinear,2,"K1 lens correction" 95,lens_correct_k2,100,100,0,-0.05,0,100,100,50,25,50,26,bilinear,2,"K2 lens correction" 96,rotate_flip_combo,100,100,90,1,0,100,100,25,25,74,25,nearest,0,"Rotate + flip" 97,scale_rotate_combo,100,100,2.0,45,0,283,283,50,50,141,141,bilinear,5,"Scale + rotate" 98,multi_transform,100,100,1.5,30,10,163,163,50,50,92,75,bilinear,5,"Scale+rotate+translate" 99,identity_chain,100,100,0,0,0,100,100,50,50,50,50,bilinear,0,"Multiple identity ops" 100,round_trip,100,100,2.0,0.5,0,100,100,50,50,50,50,bilinear,1,"Scale up then down"