diff --git a/.gitattributes b/.gitattributes index 23a502c0fcd8a8f2dd8e0793e91aef90984d8352..7002c486568bd811a3b6d372c644f13d3939fb44 100644 --- a/.gitattributes +++ b/.gitattributes @@ -387,7 +387,6 @@ testfont binary /src/modules/HTTPLoop/timeout.h foreign_ident /src/modules/HTTPLoop/util.c foreign_ident /src/modules/HTTPLoop/util.h foreign_ident -/src/modules/Image/Makefile foreign_ident /src/modules/Image/Makefile.in foreign_ident /src/modules/Image/acconfig.h foreign_ident /src/modules/Image/assembly.h foreign_ident @@ -445,7 +444,7 @@ testfont binary /src/modules/Image/poly.c foreign_ident /src/modules/Image/polyfill.c foreign_ident /src/modules/Image/search.c foreign_ident -/src/modules/Image/testsuite.in.in foreign_ident +/src/modules/Image/testsuite.in foreign_ident /src/modules/Java/Makefile.in foreign_ident /src/modules/Java/acconfig.h foreign_ident /src/modules/Java/jvm.c foreign_ident diff --git a/src/modules/Image/Makefile b/src/modules/Image/Makefile deleted file mode 100644 index 033af40c8a6fe300cc25b9c7247347dd2e58619c..0000000000000000000000000000000000000000 --- a/src/modules/Image/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# $Id: Makefile,v 1.20 2002/02/04 14:51:26 nilsson Exp $ - -module_testsuite.in: testsuite.in.in mktests.pike - pike mktests.pike -t testsuite.in.in >module_testsuite.in - -tests.pike: testsuite.in.in mktests.pike - pike mktests.pike testsuite.in.in >tests.pike - -test: tests.pike - pike tests.pike diff --git a/src/modules/Image/Makefile.in b/src/modules/Image/Makefile.in index bd74879f41cbe1ecf7a71ca16bbbbcb16d5e8b09..f11171ff1617fd164baf6daa61f3476173bfd964 100644 --- a/src/modules/Image/Makefile.in +++ b/src/modules/Image/Makefile.in @@ -1,4 +1,4 @@ -# $Id: Makefile.in,v 1.33 2002/08/26 09:58:00 grubba Exp $ +# $Id: Makefile.in,v 1.34 2002/12/12 16:40:41 nilsson Exp $ @make_variables@ VPATH=@srcdir@:@srcdir@/../..:../.. OBJS = image_module.o \ @@ -10,7 +10,6 @@ MODNAME=image MODULE_SUBDIRS=encodings MODULE_ARCHIVES=encodings/encodings.a MODULE_LDFLAGS=@LDFLAGS@ @LIBS@ -REAL_TESTSUITE=module_testsuite.in CONFIG_HEADERS=@CONFIG_HEADERS@ diff --git a/src/modules/Image/mktests.pike b/src/modules/Image/mktests.pike deleted file mode 100644 index fc4120def1ac9cb7a8535cc6e9ba3d3753e798cc..0000000000000000000000000000000000000000 --- a/src/modules/Image/mktests.pike +++ /dev/null @@ -1,186 +0,0 @@ - -string test="",name=0,module=0,chapter=0; -int testline; -string testfile; -array modules=({}); -array chapters=({}); -array tests=({}); - -int mode=0; -int n=0; - -void finish_test() -{ - if (!name) return; - int m1,m2,m3; - - switch (mode) - { - case 0: - write("void test_"+(m1=sizeof(modules))+ - "_"+(m2=sizeof(chapters))+ - "_"+(m3=sizeof(tests))+"()\n" - "{\n" - " write(\" test: "+name+"...\");\n" - " mixed err=catch {\n"+ - test+ - " };\n" - " if (stringp(err))\n" - " write(err+\"\\n\");\n" - " else\n" - " {\n" - " failed++;\n" - " err=({err[0],err[1][sizeof(err[1])-2..]});\n" - " write(\"\\n\"+master()->describe_backtrace(err));\n" - " }\n" - "}\n\n"); - break; - case 1: - test=replace(cpp("#define ok(S) return \"ok\"\n" - "#define fail(S) return (S)\n"+ - replace(test,({"#","ok()"}),({"���","ok(\"ok\")"})), - ),"���","#"); - write("test_any([["+test+"]], \"ok\")\n"); - break; - case 2: - test=replace(cpp("#define ok(S) return 1\n" - "#define fail(S) do { werror(\"failure; "+module+"/"+chapter+"/"+name+": \"+(S)+\"\\n\"); return 0; } while (0)\n"+ - replace(test,({"#","ok()"}),({"���","ok(\"ok\")"})), - ),"���","#"); - write(testfile + ":" + testline + ": test "+(++n)+", expected result: EQ\n" - "mixed a()" - "{\n"+ - test+ - "}\n" - "mixed b() { return 1; }\n" - "\n....\n"); - break; - } - name=0; -} - -void new_test(string _name,string file,int line) -{ - if (name) finish_test(); - if (!chapter) werror(file+":"+line+"; missing chapter\n"); - name=_name; - tests+=({name=_name}); - testline = line; - testfile = file; - test="#"+(line+1)+" \""+file+"\"\n"; - werror(" generating test: "+name+"\n"); -} - -void finish_chapter() -{ - if (!chapter) return; - finish_test(); - int m1,m2; - if (!mode) - { - write("void test_chapter_"+(m1=sizeof(modules)) - +"_"+(m2=sizeof(chapters))+"()\n" - "{\n" - " int infailed=failed,inisok=isok;\n" - " write(\" chapter: "+chapter+"\\n\");\n"); - foreach (indices(tests),int n) - write(" test_"+m1+"_"+m2+"_"+(n+1)+"();\n"); - write(" write(\" tests failed: \"+(failed-infailed)+\"\\n\"\n" - " \" tests ok: \"+(isok-inisok)+\"\\n\");\n"); - write("}\n\n"); - } - tests=({}); - werror(" generating chapter: "+chapter+"\n"); -} - -void new_chapter(string _name,string file,int line) -{ - if (chapter) finish_chapter(); - if (!module) werror(file+":"+line+"; missing module\n"); - chapters+=({chapter=_name}); -} - -void finish_module() -{ - if (!module) return; - finish_chapter(); - int m; - if (!mode) - { - write("void test_module_"+(m=sizeof(modules))+"()\n" - "{\n" - " int infailed=failed,inisok=isok;\n" - " write(\"module: "+module+"\\n\");\n"); - foreach (indices(chapters),int n) - write(" test_chapter_"+m+"_"+(n+1)+"();\n"); - write(" write(\"tests failed: \"+(failed-infailed)+\"\\n\"\n" - " \"tests ok: \"+(isok-inisok)+\"\\n\");\n"); - write("}\n\n"); - } - chapters=({}); -} - -void new_module(string name,string file,int line) -{ - finish_module(); - modules+=({module=name}); - werror(" generating tests for module: "+module+"\n"); -} - -int main(int ac,array am) -{ - int n; - - if (ac>=2 && am[1]=="-t") mode=2,am=am[..0]+am[2..]; - - if (ac<2) - { - werror("usage: mktests [-t] <file>\n"); - return 1; - } - - object f=Stdio.File(am[1],"r"); - - if (!mode) - { - write("// generated from "+am[1]+" by mktests\n"); - write("// do not edit this file\n\n\n"); - write("int failed,isok;\n" - "\n" - "void fail(string s) { failed++; throw(s); }\n" - "void ok(void|string s) { isok++; throw(s||\"ok\"); }\n"); - } - - foreach (f->read(0xffffff)/"\n",string s) - { - n++; - if (s!="" && s[0]=='#') - { - string what,name; - sscanf(s,"#%s %s",what,name); - switch (what) - { - case "module": new_module(name,am[1],n); break; - case "chapter": new_chapter(name,am[1],n); break; - case "test": new_test(name,am[1],n); break; - default: - test+=s+"\n"; - break; - } - } - else test+=s+"\n"; - } - finish_module(); - - if (!mode) - { - write("int main()\n" - "{\n"); - foreach (indices(modules),int n) - write(" test_module_"+(n+1)+"();\n"); - write(" write(\"total tests failed: \"+failed+\"\\n\"\n" - " \"total tests ok: \"+isok+\"\\n\");\n" - " return !!failed;\n" - "}\n\n"); - } -} diff --git a/src/modules/Image/module_testsuite.in b/src/modules/Image/module_testsuite.in deleted file mode 100644 index 7bde1437f343c686a1b967998b8e7f1c6e67b343..0000000000000000000000000000000000000000 --- a/src/modules/Image/module_testsuite.in +++ /dev/null @@ -1,1358 +0,0 @@ -testsuite.in.in:8: test 1, expected result: EQ -mixed a(){ -# 1 "-" - - -#9 "testsuite.in.in" -object img1=Image.PNM.decode("P1\n5 5\n0 1 1 1 1\n1 0 1 1 1\n1 1 0 1 1\n1 1 1 0 1\n1 1 1 1 0"); -object img2=Image.PNM.decode("P4\n5 5\nx����"); -if (img1!=img2) do { werror("failure; Image.Image/testsuite/Image.PNM.decode, ==: "+( "differ\n" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:14: test 2, expected result: EQ -mixed a(){ -# 1 "-" - - -#15 "testsuite.in.in" -if ("hejsan, hoppsan" != MIME.decode_base64("aGVqc2FuLCBob3Bwc2Fu\n")) -do { werror("failure; Image.Image/testsuite/MIME.decode_base64: "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:19: test 3, expected result: EQ -mixed a(){ -# 1 "-" - - -#20 "testsuite.in.in" -object img1=Image.GIF.decode(MIME.decode_base64("R0lGODlhBQAFAIAAAAAAAP///ywAAAAABQAFAAACCAxwEWrY8BwoADs=")); -object img2=Image.PNM.decode("P4\n5 5\nx\00����"); -if (img1!=img2) do { werror("failure; Image.Image/testsuite/Image.GIF.decode, MIME.decode_base64, ==: "+( "differ\n" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:28: test 4, expected result: EQ -mixed a(){ -# 1 "-" - - -#29 "testsuite.in.in" -object img=Image.Image(); -if (!img || -img->xsize() || -img->ysize()) do { werror("failure; Image.Image/create/Image.Image() no image: "+( "have size" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:35: test 5, expected result: EQ -mixed a(){ -# 1 "-" - - -#36 "testsuite.in.in" -object img=Image.Image(100,100); -if (!img || -img->xsize()!=100 || -img->ysize()!=100) do { werror("failure; Image.Image/create/Image.Image() image: "+( "wrong size" )+"\n"); return 0; } while (0); -if (img!=0) do { werror("failure; Image.Image/create/Image.Image() image: "+( "wrong color" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:43: test 6, expected result: EQ -mixed a(){ -# 1 "-" - - -#44 "testsuite.in.in" -foreach ( ({0x7fffffff,0x7ffffffff, -0x7ffffffff,0x7fffffffff,0x7ffffffffff}), -int x) -if (x>0) -{ -if (!catch { Image.Image(x,2); }) do { werror("failure; Image.Image/create/Image.Image() too big: "+( x+"x2 permitted (This might be correct - do you have "+x+" *2*4 bytes of memory?)" )+"\n"); return 0; } while (0); -if (!catch { Image.Image(x/32768,65537); }) do { werror("failure; Image.Image/create/Image.Image() too big: "+( (x/32768)+"x65537 permitted" )+"\n"); return 0; } while (0); -if (!catch { Image.Image(x/(32768*3),65537); }) do { werror("failure; Image.Image/create/Image.Image() too big: "+( (x/(32768*3))+"x65537 permitted" )+"\n"); return 0; } while (0); -} -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:55: test 7, expected result: EQ -mixed a(){ -# 1 "-" - - -#56 "testsuite.in.in" -object img=Image.Image(1000,1000,17,42,96); -if (!img || -img->xsize()!=1000 || -img->ysize()!=1000) do { werror("failure; Image.Image/create/Image.Image() color: "+( "wrong size" )+"\n"); return 0; } while (0); -if (img!=({17,42,96})) do { werror("failure; Image.Image/create/Image.Image() color: "+( "wrong color" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:66: test 8, expected result: EQ -mixed a(){ -# 1 "-" - - -#67 "testsuite.in.in" -foreach ( -({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }), -({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }), -({ "cyan", ({ 0, 255, 255 }), ({ 127, 255, 255 }), 168 }), -({ "green", ({ 0, 255, 0 }), ({ 85, 255, 255 }), 127 }), -({ "magenta", ({ 255, 0, 255 }), ({ 212, 255, 255 }), 128 }), -({ "red", ({ 255, 0, 0 }), ({ 0, 255, 255 }), 87 }), -({ "white", ({ 255, 255, 255 }), ({ 0, 0, 255 }), 255 }), -({ "yellow", ({ 255, 255, 0 }), ({ 42, 255, 255 }), 214 }) }), -array i) -{ -object c1=Image.Color(i[0]); -object c2=Image.Color(@i[1]); -object c3=Image.Color.rgb(@i[1]); - -if (c1!=c2) - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "by values != by name" )+"\n"); return 0; } while (0); -if (c1!=c3) - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "by rgb() != by name|values" )+"\n"); return 0; } while (0); - -if (c1->r!=i[1][0] || -c1->g!=i[1][1] || -c1->b!=i[1][2]) - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->r("+c1->r+"), ->g, ->b reported" )+"\n"); return 0; } while (0); - -if (c1->rgb()[0]!=i[1][0] || -c1->rgb()[1]!=i[1][1] || -c1->rgb()[2]!=i[1][2]) - - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->rgb() (" +c1->rgb()[0]+","+c1->rgb()[1]+","+c1->rgb()[2]+") reported" )+"\n"); return 0; } while (0); - -if (c1->hsv()[0]!=i[2][0] || -c1->hsv()[1]!=i[2][1] || -c1->hsv()[2]!=i[2][2]) - - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->hsv() (" +c1->hsv()[0]+","+c1->hsv()[1]+","+c1->hsv()[2]+") reported" )+"\n"); return 0; } while (0); - -if (c1->greylevel()!=i[3]) - - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->greylevel() ("+c1->greylevel()+", should be " +i[3]+") reported" )+"\n"); return 0; } while (0); - -if (c1->grey()->r!=i[3]) - - - -do { werror("failure; Image.Image/Image.Color/Image.Color: "+( "color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " "wrong ->grey()->r ("+c1->grey()->r+", should be " +i[3]+") reported" )+"\n"); return 0; } while (0); -}; -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:128: test 9, expected result: EQ -mixed a(){ -# 1 "-" - - -#129 "testsuite.in.in" -if (!arrayp(indices(Image.Color))) -do { werror("failure; Image.Image/Image.Color/indices(Image.Color): "+( "wrong type\n" )+"\n"); return 0; } while (0); -if (!stringp(indices(Image.Color)[0])) -do { werror("failure; Image.Image/Image.Color/indices(Image.Color): "+( "wrong type of elements\n" )+"\n"); return 0; } while (0); -if (sizeof(indices(Image.Color))<8) -do { werror("failure; Image.Image/Image.Color/indices(Image.Color): "+( "too few colors\n" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:137: test 10, expected result: EQ -mixed a(){ -# 1 "-" - - -#138 "testsuite.in.in" -if (!arrayp(values(Image.Color))) -do { werror("failure; Image.Image/Image.Color/values(Image.Color): "+( "wrong type\n" )+"\n"); return 0; } while (0); -if (!objectp(values(Image.Color)[0])) -do { werror("failure; Image.Image/Image.Color/values(Image.Color): "+( "wrong type of elements\n" )+"\n"); return 0; } while (0); -if (sizeof(indices(Image.Color))!=sizeof(values(Image.Color))) -do { werror("failure; Image.Image/Image.Color/values(Image.Color): "+( "not the same size of indices() and values()\n" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:146: test 11, expected result: EQ -mixed a(){ -# 1 "-" - - -#147 "testsuite.in.in" -foreach ( -({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }), -({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }), -({ "cyan", ({ 0, 255, 255 }), ({ 127, 255, 255 }), 168 }), -({ "green", ({ 0, 255, 0 }), ({ 85, 255, 255 }), 127 }), -({ "magenta", ({ 255, 0, 255 }), ({ 212, 255, 255 }), 128 }), -({ "red", ({ 255, 0, 0 }), ({ 0, 255, 255 }), 87 }), -({ "white", ({ 255, 255, 255 }), ({ 0, 0, 255 }), 255 }), -({ "yellow", ({ 255, 255, 0 }), ({ 42, 255, 255 }), 214 }) }), -array i) -foreach ( ({Image.Color(i[0]),Image.Color.rgb(@i[1])}), object z) -{ -z->light(); -z->dark(); -z->neon(); -z->dull(); -z->bright(); -} -return 1; - - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:171: test 12, expected result: EQ -mixed a(){ -# 1 "-" - - -#172 "testsuite.in.in" -object img=Image.Image(10,10); -img=img->test(42); -if (equal(img->max(),({0,0,0}))) do { werror("failure; Image.Image/testsuite II/Image.Image->test(), ==: "+( "failed" )+"\n"); return 0; } while (0); -img->setpixel(2,2,0,255,0); -if (img==img->invert()) do { werror("failure; Image.Image/testsuite II/Image.Image->test(), ==: "+( "failed" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:182: test 13, expected result: EQ -mixed a(){ -# 1 "-" - - -#183 "testsuite.in.in" -object img=Image.Image(100,100)->test(42); -if (img!=img->copy()) do { werror("failure; Image.Image/copy/Image.Image->copy: "+( "differ" )+"\n"); return 0; } while (0); -if (img->copy(25,25,75,75)!=img->copy(25,25,75,75)) do { werror("failure; Image.Image/copy/Image.Image->copy: "+( "subregion differ" )+"\n"); return 0; } while (0); -if (img->copy(25,25,75,75)==img) do { werror("failure; Image.Image/copy/Image.Image->copy: "+( "subregion doesn't differ" )+"\n"); return 0; } while (0); -img->setpixel(2,2,0,255,0); -if (img->copy()==img->invert()->copy()) do { werror("failure; Image.Image/copy/Image.Image->copy: "+( "copy of other doesn't differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:191: test 14, expected result: EQ -mixed a(){ -# 1 "-" - - -#192 "testsuite.in.in" -object img=Image.Image(100,100)->test(42); -if (img->clear()==img) do { werror("failure; Image.Image/copy/Image.Image->clear: "+( "doesn't differ" )+"\n"); return 0; } while (0); -if (img->clear(0,0,0)!=0) do { werror("failure; Image.Image/copy/Image.Image->clear: "+( "wrong color (black)" )+"\n"); return 0; } while (0); -if (img->clear(1,255,0)!=({1,255,0})) do { werror("failure; Image.Image/copy/Image.Image->clear: "+( "wrong color (color)" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:198: test 15, expected result: EQ -mixed a(){ -# 1 "-" - - -#199 "testsuite.in.in" -object img=Image.Image(100,100)->test(42); -if (img!=img->clone()) do { werror("failure; Image.Image/copy/Image.Image->clone: "+( "differ" )+"\n"); return 0; } while (0); -img->setpixel(2,2,0,255,0); -if (img->clone()==img->invert()->clone()) do { werror("failure; Image.Image/copy/Image.Image->clone: "+( "clone of other doesn't differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:205: test 16, expected result: EQ -mixed a(){ -# 1 "-" - - -#206 "testsuite.in.in" -object img=Image.Image(20,20); -img->box(4,4,8,8,Image.Color.red); -img->box(8,8,12,12,Image.Color.green); -img->box(12,4,16,8,Image.Color.blue); - -array z; -if (!equal(z=img->find_autocrop(),({ 4, 4, 16, 12 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop() returned %O, not %O\n",z,({ 4, 4, 16, 12 })) )+"\n"); return 0; } while (0); -if (!equal(z=img->find_autocrop(5),({ -1, -1, 21, 17 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(5) returned %O, not %O\n",z,({ -1, -1, 21, 17 })) )+"\n"); return 0; } while (0); -if (!equal(z=img->find_autocrop(-2),({ 6, 6, 14, 10 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(-2) returned %O, not %O\n",z,({ 6, 6, 14, 10 })) )+"\n"); return 0; } while (0); - -if (!equal(z=img->find_autocrop(0,1,0,0,0),({ 4, 0, 19, 19 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(0,1,0,0,0) returned %O, not %O\n",z,({ 4, 0, 19, 19 })) )+"\n"); return 0; } while (0); -if (!equal(z=img->find_autocrop(0,0,1,0,0),({ 0, 0, 16, 19 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(0,0,1,0,0) returned %O, not %O\n",z,({ 0, 0, 16, 19 })) )+"\n"); return 0; } while (0); -if (!equal(z=img->find_autocrop(0,0,0,1,0),({ 0, 4, 19, 19 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(0,0,0,1,0) returned %O, not %O\n",z,({ 0, 4, 19, 19 })) )+"\n"); return 0; } while (0); -if (!equal(z=img->find_autocrop(0,0,0,0,1),({ 0, 0, 19, 12 }))) -do { werror("failure; Image.Image/copy/Image.Image->find_autocrop: "+( sprintf("find_autocrop(0,0,0,0,1) returned %O, not %O\n",z,({ 0, 0, 19, 12 })) )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:230: test 17, expected result: EQ -mixed a(){ -# 1 "-" - - -#231 "testsuite.in.in" -object img=Image.Image(20,20); -img->box(4,4,8,8,Image.Color.red); -img->box(8,8,12,12,Image.Color.green); -img->box(12,4,16,8,Image.Color.blue); - -if (img->autocrop()!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhDQAJAJEAAAAAAP8AAAAA/wD/ACwAAAAADQAJAAECIkwcACDSck5azkE5mb1yaYsNg7gJ\r\nHjCOw3mqI+u5K4y6ZwEAOw=="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop: "+( "autocropped (all) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(0,1,0,0,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhEAAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEAAUAAECOQR8l6rc/SCUc54QcFBCdKFk2XZ4\r\nHniNJHB6ocq1bzYMdYtCtj1YDW/zKYA9IYBoNCaVSmaz+YQ2CgA7"))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop: "+( "autocropped (0,1,0,0,0) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(0,0,1,0,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhEQAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEQAUAAECOgR8l6rc/SCUc1YVQg5KCC80msYd\r\n3xdiZAmgn7h2LqwNg+2m030PFtS7/RpB3/BQPB6Vy2XT6YRGfwUAOw=="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop: "+( "autocropped (0,0,1,0,0) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(0,0,0,1,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhFAAQAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAAQAAECMwQckXEg8kRrQCl2IJT0XNVsUOd9\r\noUhW1zCwIpcebTvEKd3aJF7rFO/zBYVCYrF4RCJjBQA7"))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop: "+( "autocropped (0,0,0,1,0) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(0,0,0,0,1)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhFAANAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAANAAECNQR8l6rc/SCUc1ZrQQg7KCGAgsVx\r\n3hGG42Ryn7pC7QnAcdMOg25nyr4b+CbB3RBSFB5/RUsBADs="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop: "+( "autocropped (0,0,0,0,1) image is not correct" )+"\n"); return 0; } while (0); - -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:263: test 18, expected result: EQ -mixed a(){ -# 1 "-" - - -#264 "testsuite.in.in" -object img=Image.Image(20,20); -img->box(4,4,8,8,Image.Color.red); -img->box(8,8,12,12,Image.Color.green); -img->box(12,4,16,8,Image.Color.blue); -img->setcolor(255,255,255); - -if (img->autocrop(5)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhFwATAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAFwATAAIDVkiku+0OOgBo\r\nrRdjPPf2H9CFYTiWJbdsQdAGmCDIgkqwrhvPs43nO54Pk9NVeL3KqTgYNJE15arkdA5Kp43ViZ2G\r\ntleT9wPu3lKpYTqdXX/abnX8TUgAADs="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop / border: "+( "autocropped (border) image is not correct" )+"\n"); return 0; } while (0); -return 1; - -if (img->autocrop(5,0,0,0,1)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhHgAXAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAHgAXAAIDbUiku+0Oxjgp\r\ntfdmrXnvHwiKIwEAJ4qq67qOrhvLKEzTt43jrg4EAWBgJRAUBS+QKxgcooxGZE25agaJUSnAZ3UC\r\nslpuczAgg5MdXrk8wPlc7LKbSou3ae+VfZ7m8dAaf39TfYM8eYaAF4mHEQkAOw=="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop / border: "+( "autocropped (5,0,0,0,1) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(5,0,0,1,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhHgAaAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAHgAaAAIDdEiku+0OxjgJ\r\nABdjvfemlOeJIwZGZZkCp6OqZbt4QVAHmyDowifTNltut/O1gMEh0XhCCjHEoum3CQYGA2y0Nz2q\r\nstmBSmb5hsUxaumMHpFh7LEaBmPN63IvHvbe8+9+TCCBeU2EbmRkiYqKjI2Nj5CQko0JADs="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop / border: "+( "autocropped (5,0,0,1,0) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(5,0,1,0,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhGwAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAGwAeAAIDfEiku+0Oxjgp\r\ntfdmrXnvHwheAFCaJpqmqcayL2y6slzTts3iQBD4gZRAMBS0SKnfL2giEo0zpGn5Ez6hAB6VCbhi\r\ntcvBQOw9UnTj8cDGY6nHbCnsvZa1U/T4WaczR/p9UXuBOneEfg6HhXKKiAuNdiMjkpOTlZaWmJmZ\r\nHQkAOw=="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop / border: "+( "autocropped (5,0,1,0,0) image is not correct" )+"\n"); return 0; } while (0); - -if (img->autocrop(5,1,0,0,0)!= -Image.GIF.decode(MIME.decode_base64( -"R0lGODlhGgAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAGgAeAAIDekiku+0Oxjgp\r\ntfdmrXnvH3gBAFmWJ4qi47q6L9DGcTzXNUutQdAHKIFAKNBFeD5fcDg0OpDJJdO5gCpLzGbplgwM\r\nBt9scburgcGD2m2FBqvLsXbaBn/J38dcjkrY78l5fzlrgiuEhYBPiHSBi3wiIpCRkZOUlJaXlwQJ\r\nADs="))) -do { werror("failure; Image.Image/copy/Image.Image->autocrop / border: "+( "autocropped (5,1,0,0,0) image is not correct" )+"\n"); return 0; } while (0); - - -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:302: test 19, expected result: EQ -mixed a(){ -# 1 "-" - - -#303 "testsuite.in.in" -array a=({0,0,0}); -array b=copy_value(a); b[0]=17; b[1]=42; b[2]=128; -if (!equal( ({0,0,0}), a)) do { werror("failure; Image.Image/testsuite III/equal, copy_value: "+( "differ (1)" )+"\n"); return 0; } while (0); -if (!equal( ({17,42,128}), b)) do { werror("failure; Image.Image/testsuite III/equal, copy_value: "+( "differ (2)" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:309: test 20, expected result: EQ -mixed a(){ -# 1 "-" - - -#310 "testsuite.in.in" -if (!equal( ({0,0,0}), -Image.Image(10,10,0,0,0)->max() )) -do { werror("failure; Image.Image/testsuite III/Image.Image->max(): "+( "erranous (1)" )+"\n"); return 0; } while (0); -if (!equal( ({17,42,36}), -Image.Image(10,10,17,42,36)->max() )) -do { werror("failure; Image.Image/testsuite III/Image.Image->max(): "+( "erranous (2)" )+"\n"); return 0; } while (0); -if (!equal( ({17,42,36}), -Image.Image(10,10,0,0,0) -->setpixel(5,5,17,42,36)->max() )) -do { werror("failure; Image.Image/testsuite III/Image.Image->max(): "+( "erranous (3)" )+"\n"); return 0; } while (0); -if (!equal( ({17,42,36}), -Image.Image(10,10,0,0,0) -->setpixel(2,2,1,2,3) -->setpixel(3,3,17,42,36) -->setpixel(4,4,3,2,1) -->max())) -do { werror("failure; Image.Image/testsuite III/Image.Image->max(): "+( "erranous (4)" )+"\n"); return 0; } while (0); -if (!equal( ({17,42,36}), -Image.Image(10,10,0,0,0) -->setpixel(2,2,17,2,3) -->setpixel(3,3,2,42,5) -->setpixel(4,4,3,2,36) -->max())) -do { werror("failure; Image.Image/testsuite III/Image.Image->max(): "+( "erranous (5)" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:339: test 21, expected result: EQ -mixed a(){ -# 1 "-" - - -#340 "testsuite.in.in" -object img=Image.Image(10,10,255,0,0); -if (!equal(img->getpixel(5,5),({255,0,0}))) do { werror("failure; Image.Image/plain/setpixel, getpixel: "+( "getpixel erranous" )+"\n"); return 0; } while (0); -img->setpixel(5,5,1,2,3); -if (!equal(img->getpixel(5,5),({1,2,3}))) do { werror("failure; Image.Image/plain/setpixel, getpixel: "+( "failed" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:346: test 22, expected result: EQ -mixed a(){ -# 1 "-" - - -#347 "testsuite.in.in" -object img=Image.Image(10,10,255,0,0); -img->setpixel(5,5,0,255,0,127); -if (!equal(img->getpixel(5,5),({127,128,0}))) do { werror("failure; Image.Image/plain/setpixel alpha: "+( "failed" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:352: test 23, expected result: EQ -mixed a(){ -# 1 "-" - - -#353 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -foreach (({40,50,60}),int z) -{ -img->line(50-z,0,50,50,255,255,255); -img->line(50-z,100,50,50,255,255,255); -img->line(100,50+z,50,50,255,255,255); -img->line(100,50-z,50,50,255,255,255); -} -object img1=Image.GIF.decode(MIME.decode_base64( -"R0lGODlhZABkAIAAAAAAAP///ywAAAAAZABkAAAC/wxwiGC7/l6UktZ6Mdatdr9toSiSZQmCjPihqPu+MdLST23Lsr7vGF7DrXw+YhEF3AiFx2NTFiwtnU5qMYpUVqvbrAT7/XG5Y3HYfD6TyWsw+vZms68qaTw3n/tazE/AvcCkpwcH95OkFkhIaGdYdwfIyDikePeIVzk5yacFdUmpOcfpIUiaiBnK5Wfp6YiaerT6SecKCrtX++o0mnnb+vrHyKvr+xgpKttbbDxLmGy77Hi86VoK28FnrfesTY3a7VwdjTc8HowJToZ9Ok6unLoemA6fOR+L3u5Fab/T8JzfaR89UPyKnYsnjFzBaP6IVWnoEGAjiKLcSXyYY6EihP8Xd2VkY8Cfxo7BKN4z2RHkCn4hI6Y8CS0LypcVW/ZbOZImCJsvSuq85hMJz5/wzrEYSrRonz85kwoFYtSpwagMqEr1xfRG06u4aGzliusrWFpjASIta1Ae2qnYrK51RjXr201u5c5FttTt3X561YqVmtVa0L2ezooxTDgM4sNVE2tZ/Njl25Ysh/zNF7SgzcsMP6qzzPkWxJEUQ4caHU4gWtQJVXM9+E7lPtOq6g38RxNhaJO0u7oeSFCn7mUc+07t1ft3zLTI23Fcfk0cZmXJg8cmTp02N5K5OEctN/3d33LVWXT3Rv0nbuM3a5XvmQv6r2+A47ME/35+zHmR8rdPj82eeM2ox45k/a1WoHwHrgWeLlYhwmCC31ni32cJWkYhYdM4yAqCEmboGDTdTBGiiPB1eNeGy1UIXHwrljjLNCxi9UYfMAZkiI034hhIAQA7")); -if (img!=img1) do { werror("failure; Image.Image/plain/Image.Image->line structure: "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:366: test 24, expected result: EQ -mixed a(){ -# 1 "-" - - -#367 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -img->line(40,0,0,40); -if (!equal( ({0,0,0}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->line color : "+( "differ (reset)" )+"\n"); return 0; } while (0); -img->line(10,10,20,20,128,13,42); -if (!equal( ({128,13,42}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->line color : "+( "differ (direct)" )+"\n"); return 0; } while (0); -img->setcolor(200,19,99); -img->line(30,20,20,30); -if (!equal( ({200,19,99}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->line color : "+( "differ (setcolor)" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:377: test 25, expected result: EQ -mixed a(){ -# 1 "-" - - -#378 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -foreach (({40,60,50}),int z) -{ -img->box(z,0,50,50,255,z,255); -img->box(z,100,50,50,255,z,0); -img->box(100,z,50,50,0,z,255); -img->box(0,z,50,50,0,z,0); -} -object img1=Image.GIF.decode(MIME.decode_base64( -"R0lGODlhZABkALMAAAAAAAAyAAA8AAAoAP8oAP8yAAAo/wAy/wA8//88AP8o//8y//88/wAAAAAAAAAAACwAAAAAZABkAAME/xAAOWe1Fue8OVAKGIbhwjAniqKe17ouHMcznZEkbq7rats/IFA4nORypV6PVSw2nU4bErlb+qJRbDY7zVWtjO1WPKZ1SV9rubxmf86K9NLtpkfhcfC1XudL4XI9fX2DZoB6TISEijeHiIuLkBZ4gXuRkYSUiGGYmJmOep6efZqPo6NspaGoqGOqYK2tW69qsrJOtHO3t0O5gry8f2eVicHBHr6Wx8eToLDMzI3Dm9HRzdOm1tHJxdrB3Jzex+DizOTl38616Lfn7LLu76jx8p709ZH3+J/Yq/uY+v65CSiwDMGCs9TpYjZgQEOHDiFGjDiRIkWLFy9mJMbAgAGPH/8/hhQpkmTJkidRatS4kiVLly8HcESJkmbNmjdLxoy5kydPhzNx4hQ6dOjPn0eRUgxatGjTokqVRuXJ1KlTqyqlStWqserVq18NbN06dukmsGDRfiRLlq3Ms2nTgm3blqxXuXJr1q0r9W7evCIDBBA8eHBhw4YRJ068mDFjxwEOHJA8eXJly5YxZ868mTNnzgIEhBYtmnTp0qdRo1a9enXrAggQxJYtm3bt2rdx49a9e/du166BBw8+nLgA2L59J1eunLly48ahR48uGnnz5texY8dNnXp376itb98+njx38ODRGxdv3nz75unTxw/O3r17++fly9df/f59/77tt5/lgMf995+BtQ044H71HXggeQsumF6DDz7YnDYEEJChhhpqWEACCYAYYoghIrRIhx2i+CGJJJJoIiEppuhhiy2W+GIdMsq4Yo0u3uhGjinuyGMCPv4I5IxD2ljkGEcimeSSZTRJgJA8Qslkk1TWaOUWUmbZ4pZZdJmkkmAOIeaYZTpx5pNpmonlmES2CcSaQ8o555to2kkDnVXqGQOfWvrpAqBfCuoBoT0amgGiZCoKAKNxOjoBpJJaQGmlj+LJZqWXcqppnZh2KqmojpKqqKmGoiqoqn6yqqerdsIqp6xt0pqmrYtEAAA7")); -if (img!=img1) do { werror("failure; Image.Image/plain/Image.Image->box structure: "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:391: test 26, expected result: EQ -mixed a(){ -# 1 "-" - - -#392 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -img->box(40,0,0,40); -if (!equal( ({0,0,0}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->box color : "+( "differ (reset)" )+"\n"); return 0; } while (0); -img->box(10,10,20,20,128,13,42); -if (!equal( ({128,13,42}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->box color : "+( "differ (direct)" )+"\n"); return 0; } while (0); -img->setcolor(200,19,99); -img->box(30,20,20,30); -if (!equal( ({200,19,99}), img->max() )) do { werror("failure; Image.Image/plain/Image.Image->box color : "+( "differ (setcolor)" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:405: test 27, expected result: EQ -mixed a(){ -# 1 "-" - - -#406 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -float x=0,y=0.2; -img->setcolor(255,254,253); -img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), -({20+x,15+y,25+x,15+y,20+x,10+y}), -({10+x,20+y,15+x,20+y,15+x,25+y}), -({20+x,25+y,25+x,20+y,20+x,20+y}), - -({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), -({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), -({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), -({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), - -({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), -({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), -({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), -({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); - -object img1=Image.GIF.decode(MIME.decode_base64( -"R0lGODlhZABkAMQAAAAAAAICAgUFBQoKChYWFigoKC0tLTAwMDIyMjMyMj8/P1lYWFFRUHJycXp5eYyLi6OioaWlpK2srLW0s8vLyszLytbV1Ojn5vTz8vn49/z7+v/+/QAAAAAAAAAAAAAAACwAAAAAZABkAAQF/yAAiONYmiaapivLuu8byzJd1zeO6/ve+z5gMDgkEo3HY1KpZDabTyhUOp1WrVZsNrvlcr3fb1gsJpfLZzRafWSw3Osd4bF7EOLtDCsDx6fmGBs7Gxh2fjgMGYIpG3yHAIAbG4s1k4SGjyaJkyyTjnGRlpQyopd3j5ucjJ59X6Glg6WmhwYICLYst7cGaAW6uro7wMAIBZmZx8jIysvLzc7O0GUOFBTVLNbWDmgKE9nZ1jvg4BMKhwISlp2TEgJrAw0XsrGiFw0DmeiqJuzuePDy1OGod8+Zvk7tMgHcR2qDPXzRAKBjkXAZwB0PI6bwZ4KjM4g1QGrUOJIkSZMnT+6mVKmSZcuWL2HClDlzZk2bNnHmzLmTJ0+fP38GFSqUaNGiR5EiVbp0aVOnTqFGjTqV6hdjKbBadRaBRdetywpoYKFBK9hDEUYB2PD1rB+xajeUdesnbVy2dOPAvTs3bxm7d/H6vapBIL9JfQdbARxYsOIpBxIkkMxi8uQDjx9n1qyZc+fOn0GDFj169CMI4LBlg2D6yAJR6yYtaE0kgAXDIyxZCECbyGuGa2X3rn377u7hvoELRx7EdtzjzIO87jQ7enMLLKBb91HdRPftO3inEA8efHnz5tGnT7+ePXv379/Hly+ffv369/HjPxQCADs=")); -if (!(img-img1<16)) do { werror("failure; Image.Image/advanced drawing/Image.Image->polyfill 1 (right triangle 0.0, 0.2): "+( "differ too much" )+"\n"); return 0; } while (0); -if (!equal(img->max(),({255,254,253}))) do { werror("failure; Image.Image/advanced drawing/Image.Image->polyfill 1 (right triangle 0.0, 0.2): "+( "wrong maxcolor" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:430: test 28, expected result: EQ -mixed a(){ -# 1 "-" - - -#431 "testsuite.in.in" -object img=Image.Image(100,100,0,0,0); -float x=-0.2,y=-0.2; -img->setcolor(255,254,253); -img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), -({20+x,15+y,25+x,15+y,20+x,10+y}), -({10+x,20+y,15+x,20+y,15+x,25+y}), -({20+x,25+y,25+x,20+y,20+x,20+y}), - -({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), -({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), -({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), -({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), - -({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), -({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), -({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), -({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); - -object img1=Image.GIF.decode(MIME.decode_base64( -"R0lGODlhZABkANUAAAAAAAICAgUFBQcHBwoKChQUFBYWFh4eHiMjIyYmJS0tLTAwMDMyMigoKFFRUFlYWHp5eX9+fnJycYyLi56dnDIyMqOioaWlpMHBwMvLyszLytHQz9bV1Orp6Ojn5vTz8vz7+v/+/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAZABkAAUG/0AAQDgcFo1GZDK5ZDKdz2dUKqVWq1csVrvddr1ecDg8JpPN53NarWa32284XD6f1+12fD6/5/P9f3+BgoKEhYVqAkmKiGQEWAMBjW0FFEkMEZNYBhMYWBUcD5KaWwUbGZchmaRGnB8hqFUVISGho6xJprCpqqyutLuywLWiuEO6wUMMwKuIv8OxUrPDxLeTAhQZGRkWSQ3b2w6FAQ8Y4ODcWN/o4BYNxsbw8fHz9PT29/f5ggIMDP7vjBD49w/BuAUECf4LKGWgQoUHWEUAFg3AMlodFCBqcAEEtWRPplHzIOGRRFoVL2bUxNEjxU8jS9KbmDLESlYtUcKkRdLkvf8IKW8aa1mRyaye+pKIM4JAo74GELAkkJk0aVWrVrFmzbqVK1evX7+GFSuWbNmyZ9GiVbt2bVu3buHGjTuXLl27d+/m1auXb9++fwEDFjx4cGHDhvlYs5b43oMkCxg2jmfAkxEGFybfm5AShGTNmgx8qJkZNKsJIJd5Nh36Vc0QpVkjQp2a1mrZgkTrvAwsNu48tGvb/vxbDQFz27oZWbctavHiz6FDlz59enXr1rFnz152QIUK3yUTAA8+AfczATi85A1MwvkzD9YrA+bB5/st6XfPp+X+Ppn4wtXnHxn5vdbfgGHEV5OACIaRXk0HNujFAykxKKEXASinTIQXbiEk2QH2ddihiCOOWKKJJqKYYoorssiiiy++GKOMMtJYY4034hYEADs=")); -if (!(img-img1<16)) do { werror("failure; Image.Image/advanced drawing/Image.Image->polyfill 2 (right triangle -0.2, -0.2): "+( "differ too much" )+"\n"); return 0; } while (0); -if (!equal(img->max(),({255,254,253}))) do { werror("failure; Image.Image/advanced drawing/Image.Image->polyfill 2 (right triangle -0.2, -0.2): "+( "wrong maxcolor" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:458: test 29, expected result: EQ -mixed a(){ -# 1 "-" - - -#459 "testsuite.in.in" -if (!objectp(Image.Font())) do { werror("failure; Image.Image/Image.Font/instansiating default font: "+( "not object" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:462: test 30, expected result: EQ -mixed a(){ -# 1 "-" - - -#463 "testsuite.in.in" -object f=Image.Font(); -object i=f->write("hej"); -if (i!=Image.PNM.decode(MIME.decode_base64("UDQKMTkgMTEK///gv/7gv//grzjglt7gth7gtv7gtv7gtx7g//7g//Hg"))) -do { werror("failure; Image.Image/Image.Font/writing simple text with default font: "+( "incorrect" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:469: test 31, expected result: EQ -mixed a(){ -# 1 "-" - - -#470 "testsuite.in.in" -object f=Image.Font(); -object i=f->write("h","o"); -if (i!=Image.PNM.decode(MIME.decode_base64("UDQKNyAyMwr+vr6ulra2trb+/v7+/s62tra2zv7+/g=="))) -do { werror("failure; Image.Image/Image.Font/writing multiple lines with default font: "+( "incorrect" )+"\n"); return 0; } while (0); -return 1; - - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:480: test 32, expected result: EQ -mixed a(){ -# 1 "-" - - -#481 "testsuite.in.in" -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -array z=(array)c; -if (sizeof(z)!=2) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white init & cast: "+( "didn't get two colors (black and white): "+((array(string))c)*", " )+"\n"); return 0; } while (0); -if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && -(z[1]!=Image.Color.black || z[0]!=Image.Color.white)) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white init & cast: "+( "didn't get black and white: "+((array(string))z)*", " )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:490: test 33, expected result: EQ -mixed a(){ -# 1 "-" - - -#491 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -img=c*img; -array z=(array)Image.Colortable(img); -if (sizeof(z)!=2) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white normal: "+( "didn't get two colors (black and white): "+((array(string))z)*", " )+"\n"); return 0; } while (0); -if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && -(z[1]!=Image.Color.black || z[0]!=Image.Color.white)) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white normal: "+( "didn't get black and white: "+((array(string))z)*", " )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:502: test 34, expected result: EQ -mixed a(){ -# 1 "-" - - -#503 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -c->floyd_steinberg(); -img=c*img; -array z=(array)Image.Colortable(img); -if (sizeof(z)!=2) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white floyd-steinberg: "+( "didn't get two colors (black and white): "+((array(string))z)*", " )+"\n"); return 0; } while (0); -if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && -(z[1]!=Image.Color.black || z[0]!=Image.Color.white)) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white floyd-steinberg: "+( "didn't get black and white: "+((array(string))z)*", " )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:515: test 35, expected result: EQ -mixed a(){ -# 1 "-" - - -#516 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -c->ordered(); -img=c*img; -array z=(array)Image.Colortable(img); -if (sizeof(z)!=2) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white ordered: "+( "didn't get two colors (black and white): "+((array(string))z)*", " )+"\n"); return 0; } while (0); -if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && -(z[1]!=Image.Color.black || z[0]!=Image.Color.white)) -do { werror("failure; Image.Image/Image.Colortable/colortable - black/white ordered: "+( "didn't get black and white: "+((array(string))z)*", " )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:528: test 36, expected result: EQ -mixed a(){ -# 1 "-" - - -#529 "testsuite.in.in" -object img=Image.Image(200,200)->test(42); -img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); -object c=Image.Colortable(img,1000)->cubicles(16,16,16,4); -if (sizeof(c)<200) do { werror("failure; Image.Image/Image.Colortable/colortable - standard: "+( "too few colors" )+"\n"); return 0; } while (0); -object img1=(c*img); -if (!(img-img1<50)) do { werror("failure; Image.Image/Image.Colortable/colortable - standard: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:537: test 37, expected result: EQ -mixed a(){ -# 1 "-" - - -#538 "testsuite.in.in" -object img=Image.Image(200,200)->test(42); -img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); -object c=Image.Colortable(32,32,32)->floyd_steinberg(); -object img1=(c*img); -if (!(img-img1<50)) do { werror("failure; Image.Image/Image.Colortable/colortable - floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:545: test 38, expected result: EQ -mixed a(){ -# 1 "-" - - -#546 "testsuite.in.in" -object img=Image.Image(200,200)->test(42); -img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); -object c=Image.Colortable(32,32,32)->ordered(); -object img1=(c*img); -if (!(img-img1<32)) do { werror("failure; Image.Image/Image.Colortable/colortable - ordered: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:557: test 39, expected result: EQ -mixed a(){ -# 1 "-" - - -#558 "testsuite.in.in" -object img=Image.Image(100,100)->test(40); -object img1=Image.PNM.decode(Image.PNM.encode(img)); -if (img!=img1) do { werror("failure; Image.Image/encoding/decoding/Image.PNM.encode/decode: "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:563: test 40, expected result: EQ -mixed a(){ -# 1 "-" - - -#564 "testsuite.in.in" -object img=Image.Image(100,100)->test(41); -object c=Image.Colortable(img,250)->cubicles(10,10,10,1)->floyd_steinberg(); -img=c*img; -object img1=Image.GIF.decode(Image.GIF.encode(img)); -if (img!=img1) do { werror("failure; Image.Image/encoding/decoding/Image.GIF.encode/decode: "+( "differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:571: test 41, expected result: EQ -mixed a(){ -# 1 "-" - - -#572 "testsuite.in.in" -object img=Image.Image(100,100)->test(42); -object c=Image.Colortable(img,256)->cubicles(16,16,16,1); -img=c*img; -object img1=Image.GIF.decode(Image.GIF.encode(img,c)); -if (img!=img1) do { werror("failure; Image.Image/encoding/decoding/Image.GIF.encode/decode colortable : "+( "differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:579: test 42, expected result: EQ -mixed a(){ -# 1 "-" - - -#580 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,256)->floyd_steinberg()->cubicles(16,16,16); -img=c*img; -object img1=Image.GIF.decode(Image.GIF.encode(img,c)); -if (!(img-img1<50)) do { werror("failure; Image.Image/encoding/decoding/Image.GIF.encode/decode colortable w/ floyd-steinberg: "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:587: test 43, expected result: EQ -mixed a(){ -# 1 "-" - - -#588 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -if (Image.AVS.decode(Image.AVS.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.AVS.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:592: test 44, expected result: EQ -mixed a(){ -# 1 "-" - - -#593 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -if (Image.BMP.decode(Image.BMP.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (truecolor): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:598: test 45, expected result: EQ -mixed a(){ -# 1 "-" - - -#599 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,256); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (8bpp): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:605: test 46, expected result: EQ -mixed a(){ -# 1 "-" - - -#606 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,16); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (4bpp): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:612: test 47, expected result: EQ -mixed a(){ -# 1 "-" - - -#613 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,2)->floyd_steinberg(); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":1])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (1bpp): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:619: test 48, expected result: EQ -mixed a(){ -# 1 "-" - - -#620 "testsuite.in.in" -object img=Image.Image(400,100,Image.Color.red); -img->line(0,0,0,99,Image.Color.green); -img->line(399,0,399,99,Image.Color.blue); -object c=Image.Colortable(img,256); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8,"rle":1])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (8bpp rle first): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:628: test 49, expected result: EQ -mixed a(){ -# 1 "-" - - -#629 "testsuite.in.in" -object img=Image.Image(400,100,Image.Color.red); -img->line(0,0,0,99,Image.Color.green); -img->line(399,0,399,99,Image.Color.blue); -object c=Image.Colortable(img,16); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4,"rle":1])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (4bpp rle first): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:637: test 50, expected result: EQ -mixed a(){ -# 1 "-" - - -#638 "testsuite.in.in" -object img=Image.Image(100,100)->test(99)->scale(400,100); -object c=Image.Colortable(img,256); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8,"rle":1])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (8bpp rle second): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:644: test 51, expected result: EQ -mixed a(){ -# 1 "-" - - -#645 "testsuite.in.in" -object img=Image.Image(100,100)->test(99)->scale(400,100); -object c=Image.Colortable(img,16); -img=c*img; -if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4,"rle":1])))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.BMP.encode/decode (4bpp rle second): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:651: test 52, expected result: EQ -mixed a(){ -# 1 "-" - - -#652 "testsuite.in.in" -object img=Image.Image(256,240)->test(43); -img=Image.Colortable( ({"white","black","red","green"}) )*img; -if (Image.HRZ.decode(Image.HRZ.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.HRZ.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:657: test 53, expected result: EQ -mixed a(){ -# 1 "-" - - -#658 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,16); -img=c*img; -if (Image.ILBM.decode(Image.ILBM.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.ILBM.encode/decode (4bpp): "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:664: test 54, expected result: EQ -mixed a(){ -# 1 "-" - - -#665 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -if (Image.PCX.decode(Image.PCX.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.PCX.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:669: test 55, expected result: EQ -mixed a(){ -# 1 "-" - - -#670 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -if (Image.PNM.decode(Image.PNM.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.PNM.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:674: test 56, expected result: EQ -mixed a(){ -# 1 "-" - - -#675 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -if (Image.TGA.decode(Image.TGA.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.TGA.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:679: test 57, expected result: EQ -mixed a(){ -# 1 "-" - - -#680 "testsuite.in.in" -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -img=c*img; -if (Image.XBM.decode(Image.XBM.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.XBM.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -return 1; - - - - - - - - - - -} -mixed b() { return 1; } - -.... -testsuite.in.in:695: test 58, expected result: EQ -mixed a(){ -# 1 "-" - - -#696 "testsuite.in.in" -#if constant(Image.XPM.encode) -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(img,16); -img=c*img; -if (Image.XPM.decode(Image.XPM.encode(img,(["colortable":c])))!=img) -do { werror("failure; Image.Image/encoding/decoding/Image.XPM.encode/decode (16 colors): "+( "differ" )+"\n"); return 0; } while (0); -#else -werror(" (Image.XPM not available) "); -#endif -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:707: test 59, expected result: EQ -mixed a(){ -# 1 "-" - - -#708 "testsuite.in.in" -#if constant(Image.XPM.encode) -object img=Image.Image(100,100)->test(43); -object c=Image.Colortable(16,16,16); -img=c*img; -if (Image.XPM.decode(Image.XPM.encode(img,(["colortable":c])))!=img) -do { werror("failure; Image.Image/encoding/decoding/Image.XPM.encode/decode (4096 colors): "+( "differ" )+"\n"); return 0; } while (0); -#endif -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:717: test 60, expected result: EQ -mixed a(){ -# 1 "-" - - -#718 "testsuite.in.in" -#if constant(Image.TIFF.encode) -object img=Image.Image(100,100)->test(43); -if (Image.TIFF.decode(Image.TIFF.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.TIFF.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -#else -werror(" (Image.TIFF not available) "); -#endif -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:726: test 61, expected result: EQ -mixed a(){ -# 1 "-" - - -#727 "testsuite.in.in" -#if constant(Image.XFace.encode) -object img=Image.Image(48,48)->test(43); -object c=Image.Colortable(({Image.Color.white,Image.Color.black})); -c->floyd_steinberg(); -img=c*img; -if (Image.XFace.decode(Image.XFace.encode(img))!=img) do { werror("failure; Image.Image/encoding/decoding/Image.XFace.encode/decode : "+( "differ" )+"\n"); return 0; } while (0); -#else -werror(" (Image.XFace not available) "); -#endif -return 1; - -} -mixed b() { return 1; } - -.... -testsuite.in.in:738: test 62, expected result: EQ -mixed a(){ -# 1 "-" - - -#739 "testsuite.in.in" -#if constant(Image.JPEG.encode) -object img=Image.Image(100,100)->test(43); -object img1=Image.JPEG.decode(Image.JPEG.encode(img,(["quality":100]))); -if (!(img-img1<10)) do { werror("failure; Image.Image/encoding/decoding/Image.JPEG.encode/decode : "+( "differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")" )+"\n"); return 0; } while (0); -#else -werror(" (Image.JPEG not available) "); -#endif -return 1; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -return 1; - -} -mixed b() { return 1; } - -.... diff --git a/src/modules/Image/testsuite.in b/src/modules/Image/testsuite.in index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fb98e42beb0160ba591216e392c3ebf595631497 100644 --- a/src/modules/Image/testsuite.in +++ b/src/modules/Image/testsuite.in @@ -0,0 +1,509 @@ +dnl $Id: testsuite.in,v 1.14 2002/12/12 16:40:41 nilsson Exp $ + +test_eq([[ Image.PNM.decode("P1\n5 5\n0 1 1 1 1\n1 0 1 1 1\n" + "1 1 0 1 1\n1 1 1 0 1\n1 1 1 1 0") ]], +Image.PNM.decode("P4\n5 5\nx����") ) + +test_eq([[ Image.GIF.decode(MIME.decode_base64( + "R0lGODlhBQAFAIAAAAAAAP///ywAAAAABQAFAAACCAxwEWrY8BwoADs=")) ]], +Image.PNM.decode("P4\n5 5\nx\00����") ) + +test_true( objectp(Image.Image()) ) +test_false( Image.Image()->xsize() ) +test_false( Image.Image()->ysize() ) + +test_true( objectp(Image.Image(100,100)) ) +test_eq( Image.Image(100,100)->xsize(), 100) +test_eq( Image.Image(100,100)->ysize(), 100) +test_false( Image.Image(100,100)!=0 ) + +define(test_too_big,[[ +test_true( $1>0 ) +test_eval_error([[ + // This should work if you have $1*2*4 bytes of memory + Image.Image($1,2) +]]) +test_eval_error( Image.Image($1/32768,65537) ) +test_eval_error( Image.Image($1/(32768*3),65537) ) +]]) + +test_too_big(0x7fffffff) +test_too_big(0x7ffffffff) +test_too_big(0x7fffffffff) +test_too_big(0x7ffffffffff) + +test_true( objectp(Image.Image(1000,1000,17,42,96)) ) +test_eq( Image.Image(1000,1000,17,42,96)->xsize(), 1000) +test_eq( Image.Image(1000,1000,17,42,96)->ysize(), 1000) +test_false( Image.Image(1000,1000,17,42,96)!=({17,42,96}) ) + +define(test_cx,[[ +test_do( add_constant("cx", c1) ) +$1 +test_do( add_constant("cx", c2) ) +$1 +test_do( add_constant("cx", c3) ) +$1 +test_do( add_constant("cx") ) +]]) + +define(test_color,[[ +test_do( add_constant("c1", Image.Color($1)) ) +test_do( add_constant("c2", Image.Color($2, $3, $4)) ) +test_do( add_constant("c3", Image.Color.rgb($2, $3, $4)) ) +test_eq( c1, c2 ) +test_eq( c2, c3 ) +test_eq( c3, c1 ) +test_cx([[ test_eq( c1->r, $2 ) ]]) +test_cx([[ test_eq( c1->g, $3 ) ]]) +test_cx([[ test_eq( c1->b, $4 ) ]]) +test_cx([[ test_equal( c1->rgb(), ({ $2, $3, $4 }) ) ]]) +test_cx([[ test_equal( cx->hsv(), ({ $5, $6, $7 }) ) ]]) +test_cx([[ test_eq( cx->hex(), sprintf("#%02x%02x%02x", $2, $3, $4) ) ]]) +test_cx([[ test_eq( cx->greylevel(), $8 ) ]]) +test_cx([[ test_eq( cx->grey()->r, $8 ) ]]) +test_cx([[ test_eq( sprintf("%t", cx->cmyk()[*])*"", "float"*4) ]]) +test_cx([[ test_eq( sprintf("%t", cx->hsvf()[*])*"", "float"*3) ]]) +test_cx([[ test_eq( sprintf("%t", cx->rgbf()[*])*"", "float"*3) ]]) +test_cx([[ test_do( cx->light() ) ]]) +test_cx([[ test_do( cx->dark() ) ]]) +test_cx([[ test_do( cx->neon() ) ]]) +test_cx([[ test_do( cx->dull() ) ]]) +test_cx([[ test_do( cx->bright() ) ]]) +test_cx([[ test_eq( cx->name(), $1) ]]) +test_cx([[ test_eq( (string)cx, $1) ]]) +test_cx([[ test_equal( (array)cx, ({ $2, $3, $4 }) ) ]]) +test_do( add_constant("c1") ) +test_do( add_constant("c2") ) +test_do( add_constant("c3") ) +]]) + +test_color( "black", 0, 0, 0, 0, 0, 0, 0 ) +test_color( "blue", 0, 0, 255, 170, 255, 255, 41 ) +test_color( "cyan", 0, 255, 255, 127, 255, 255, 168 ) +test_color( "green", 0, 255, 0, 85, 255, 255, 127 ) +test_color( "magenta", 255, 0, 255, 212, 255, 255, 128 ) +test_color( "red", 255, 0, 0, 0, 255, 255, 87 ) +test_color( "white", 255, 255, 255, 0, 0, 255, 255 ) +test_color( "yellow", 255, 255, 0, 42, 255, 255, 214 ) + +test_true( arrayp(indices(Image.Color)) ) +test_true( stringp(indices(Image.Color)[0]) ) +test_true( sizeof(indices(Image.Color))>8 ) + +test_true( arrayp(values(Image.Color)) ) +test_true( objectp(values(Image.Color)[0]) ) +test_eq( sizeof(indices(Image.Color)), sizeof(values(Image.Color)) ) + +define(test_img,[[ +test_do([[ + object img = Image.Image(100,100)->test(42); + img->setpixel(2,2,0,255,0); + add_constant("img", img); +]]) +$1 +test_do( add_constant("img") ) +]]) + +test_img([[ test_false( equal(img->max(),({0,0,0})) ) ]]) +test_img([[ test_true( objectp( img->setpixel(3,3,0,255,0) ) ) ]]) +test_img([[ test_false( img==img->invert() ) ]]) +test_img([[ test_eq( img->invert(), img->invert() ) ]]) + +test_img([[ test_eq( img->copy(), img ) ]]) +test_img([[ test_eq( img->copy(25,25,75,75), img->copy(25,25,75,75) ) ]]) +test_img([[ test_false( img==img->copy(25,25,75,75) ) ]]) +test_img([[ test_false( img->copy()==img->invert()->copy() ) ]]) + +test_img([[ test_false( img==img->clear() ) ]]) +test_img([[ test_eq( img->clear(0,0,0), 0 ) ]]) +test_img([[ test_eq( img->clear(1,255,0), ({1,255,0}) ) ]]) + +test_img([[ test_eq( img, img->clone() ) ]]) +test_img([[ test_fales( img->clone()==img->invert()->clone() ) ]]) + +test_do([[ + object img = Image.Image(20,20); + img->box(4,4,8,8,Image.Color.red); + img->box(8,8,12,12,Image.Color.green); + img->box(12,4,16,8,Image.Color.blue); + img->setcolor(255,255,255); + add_constant("img", img); +]]) +test_equal( img->find_autocrop(), ({ 4, 4, 16, 12 }) ) +test_equal( img->find_autocrop(5), ({ -1, -1, 21, 17 }) ) +test_equal( img->find_autocrop(-2), ({ 6, 6, 14, 10 }) ) +test_equal( img->find_autocrop(0,1,0,0,0), ({ 4, 0, 19, 19 }) ) +test_equal( img->find_autocrop(0,0,1,0,0), ({ 0, 0, 16, 19 }) ) +test_equal( img->find_autocrop(0,0,0,1,0), ({ 0, 4, 19, 19 }) ) +test_equal( img->find_autocrop(0,0,0,0,1), ({ 0, 0, 19, 12 }) ) +test_eq( img->autocrop(),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhDQAJAJEAAAAAAP8AAAAA/wD/ACwAAAAADQAJAAECIkwcACD" + "Sck5azkE5mb1yaYsNg7gJ\r\nHjCOw3mqI+u5K4y6ZwEAOw==")) ]]) +test_eq( img->autocrop(0,1,0,0,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhEAAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEAAUAAECOQR8l6r" + "c/SCUc54QcFBCdKFk2XZ4\r\nHniNJHB6ocq1bzYMdYtCtj1YDW/zKY" + "A9IYBoNCaVSmaz+YQ2CgA7")) ]]) +test_eq( img->autocrop(0,0,1,0,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhEQAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEQAUAAECOgR8l6" + "rc/SCUc1YVQg5KCC80msYd\r\n3xdiZAmgn7h2LqwNg+2m030PFtS7" + "/RpB3/BQPB6Vy2XT6YRGfwUAOw==")) ]]) +test_eq( img->autocrop(0,0,0,1,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhFAAQAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAAQAAECMwQckX" + "Eg8kRrQCl2IJT0XNVsUOd9\r\noUhW1zCwIpcebTvEKd3aJF7rFO/z" + "BYVCYrF4RCJjBQA7")) ]]) +test_eq( img->autocrop(0,0,0,0,1),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhFAANAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAANAAECNQR8l6" + "rc/SCUc1ZrQQg7KCGAgsVx\r\n3hGG42Ryn7pC7QnAcdMOg25nyr4b" + "+CbB3RBSFB5/RUsBADs=")) ]]) +test_eq( img->autocrop(5),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhFwATAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAA" + "AAFwATAAIDVkiku+0OOgBo\r\nrRdjPPf2H9CFYTiWJbdsQdAGmCDI" + "gkqwrhvPs43nO54Pk9NVeL3KqTgYNJE15arkdA5Kp43ViZ2G\r\ntl" + "eT9wPu3lKpYTqdXX/abnX8TUgAADs=")) ]]) +test_eq( img->autocrop(5,0,0,0,1),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhHgAXAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAA" + "AAHgAXAAIDbUiku+0Oxjgp\r\ntfdmrXnvHwiKIwEAJ4qq67qOrhvL" + "KEzTt43jrg4EAWBgJRAUBS+QKxgcooxGZE25agaJUSnAZ3UC\r\nsl" + "puczAgg5MdXrk8wPlc7LKbSou3ae+VfZ7m8dAaf39TfYM8eYaAF4mH" + "EQkAOw==")) ]]) +test_eq( img->autocrop(5,0,0,1,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhHgAaAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAA" + "AAHgAaAAIDdEiku+0OxjgJ\r\nABdjvfemlOeJIwZGZZkCp6OqZbt4" + "QVAHmyDowifTNltut/O1gMEh0XhCCjHEoum3CQYGA2y0Nz2q\r\nst" + "mBSmb5hsUxaumMHpFh7LEaBmPN63IvHvbe8+9+TCCBeU2EbmRkiYqK" + "jI2Nj5CQko0JADs=")) ]]) +test_eq( img->autocrop(5,0,1,0,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhGwAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAA" + "AAGwAeAAIDfEiku+0Oxjgp\r\ntfdmrXnvHwheAFCaJpqmqcayL2y6" + "slzTts3iQBD4gZRAMBS0SKnfL2giEo0zpGn5Ez6hAB6VCbhi\r\ntc" + "vBQOw9UnTj8cDGY6nHbCnsvZa1U/T4WaczR/p9UXuBOneEfg6HhXKK" + "iAuNdiMjkpOTlZaWmJmZ\r\nHQkAOw==")) ]]) +test_eq( img->autocrop(5,1,0,0,0),[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhGgAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAA" + "AAGgAeAAIDekiku+0Oxjgp\r\ntfdmrXnvH3gBAFmWJ4qi47q6L9DG" + "cTzXNUutQdAHKIFAKNBFeD5fcDg0OpDJJdO5gCpLzGbplgwM\r\nBt" + "9scburgcGD2m2FBqvLsXbaBn/J38dcjkrY78l5fzlrgiuEhYBPiHSB" + "i3wiIpCRkZOUlJaXlwQJ\r\nADs=")) ]]) +test_do( add_constant("img") ) + +test_equal( Image.Image(10,10,0,0,0)->max(), ({0,0,0}) ) +test_equal( Image.Image(10,10,17,42,36)->max(), ({17,42,36}) ) +test_equal( Image.Image(10,10,0,0,0)->setpixel(5,5,17,42,36)->max(), + ({17,42,36}) ) +test_equal( Image.Image(10,10,0,0,0) + ->setpixel(2,2,1,2,3) + ->setpixel(3,3,17,42,36) + ->setpixel(4,4,3,2,1) + ->max(), ({17,42,36}) ) +test_equal( Image.Image(10,10,0,0,0) + ->setpixel(2,2,17,2,3) + ->setpixel(3,3,2,42,5) + ->setpixel(4,4,3,2,36) + ->max(), ({17,42,36}) ) + +test_any_equal([[ + object img=Image.Image(10,10,255,0,0); + return img->getpixel(5,5); ]], ({255,0,0}) ) +test_any_equal([[ + object img=Image.Image(10,10,255,0,0); + img->setpixel(5,5,1,2,3); + return img->getpixel(5,5); ]], ({1,2,3}) ) + +test_any_equal([[ + object img=Image.Image(10,10,255,0,0); + img->setpixel(5,5,0,255,0,127); + return img->getpixel(5,5); ]], ({127,128,0}) ) + +test_any([[ + object img=Image.Image(100,100,0,0,0); + foreach (({40,50,60}),int z) + { + img->line(50-z,0,50,50,255,255,255); + img->line(50-z,100,50,50,255,255,255); + img->line(100,50+z,50,50,255,255,255); + img->line(100,50-z,50,50,255,255,255); + } + return img; +]],[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhZABkAIAAAAAAAP///ywAAAAAZABkAAAC/wxwiGC7/l6UktZ6Mdatdr9toSiSZQmCjPihqPu+MdLST23Lsr7vGF7DrXw+YhEF3AiFx2NTFiwtnU5qMYpUVqvbrAT7/XG5Y3HYfD6TyWsw+vZms68qaTw3n/tazE/AvcCkpwcH95OkFkhIaGdYdwfIyDikePeIVzk5yacFdUmpOcfpIUiaiBnK5Wfp6YiaerT6SecKCrtX++o0mnnb+vrHyKvr+xgpKttbbDxLmGy77Hi86VoK28FnrfesTY3a7VwdjTc8HowJToZ9Ok6unLoemA6fOR+L3u5Fab/T8JzfaR89UPyKnYsnjFzBaP6IVWnoEGAjiKLcSXyYY6EihP8Xd2VkY8Cfxo7BKN4z2RHkCn4hI6Y8CS0LypcVW/ZbOZImCJsvSuq85hMJz5/wzrEYSrRonz85kwoFYtSpwagMqEr1xfRG06u4aGzliusrWFpjASIta1Ae2qnYrK51RjXr201u5c5FttTt3X561YqVmtVa0L2ezooxTDgM4sNVE2tZ/Njl25Ysh/zNF7SgzcsMP6qzzPkWxJEUQ4caHU4gWtQJVXM9+E7lPtOq6g38RxNhaJO0u7oeSFCn7mUc+07t1ft3zLTI23Fcfk0cZmXJg8cmTp02N5K5OEctN/3d33LVWXT3Rv0nbuM3a5XvmQv6r2+A47ME/35+zHmR8rdPj82eeM2ox45k/a1WoHwHrgWeLlYhwmCC31ni32cJWkYhYdM4yAqCEmboGDTdTBGiiPB1eNeGy1UIXHwrljjLNCxi9UYfMAZkiI034hhIAQA7")) +]]) + +test_do( add_constant("img", Image.Image(100,100,0,0,0)) ) +test_do( img->line(40,0,0,40) ) +test_equal( img->max(), ({ 0, 0, 0 }) ) +test_do( img->line(10,10,20,20,128,13,42) ) +test_equal( img->max(), ({ 128, 13, 42 }) ) +test_do( img->setcolor(200,19,99) ) +test_do( img->line(30,20,20,30) ) +test_equal( img->max(), ({ 200, 19, 99 }) ) +test_do( add_constant("img") ) + +test_any([[ + object img=Image.Image(100,100,0,0,0); + foreach (({40,60,50}),int z) + { + img->box(z,0,50,50,255,z,255); + img->box(z,100,50,50,255,z,0); + img->box(100,z,50,50,0,z,255); + img->box(0,z,50,50,0,z,0); + } + return img; +]],[[ + Image.GIF.decode(MIME.decode_base64( + "R0lGODlhZABkALMAAAAAAAAyAAA8AAAoAP8oAP8yAAAo/wAy/wA8//88AP8o//8y//88/wAAAAAAAAAAACwAAAAAZABkAAME/xAAOWe1Fue8OVAKGIbhwjAniqKe17ouHMcznZEkbq7rats/IFA4nORypV6PVSw2nU4bErlb+qJRbDY7zVWtjO1WPKZ1SV9rubxmf86K9NLtpkfhcfC1XudL4XI9fX2DZoB6TISEijeHiIuLkBZ4gXuRkYSUiGGYmJmOep6efZqPo6NspaGoqGOqYK2tW69qsrJOtHO3t0O5gry8f2eVicHBHr6Wx8eToLDMzI3Dm9HRzdOm1tHJxdrB3Jzex+DizOTl38616Lfn7LLu76jx8p709ZH3+J/Yq/uY+v65CSiwDMGCs9TpYjZgQEOHDiFGjDiRIkWLFy9mJMbAgAGPH/8/hhQpkmTJkidRatS4kiVLly8HcESJkmbNmjdLxoy5kydPhzNx4hQ6dOjPn0eRUgxatGjTokqVRuXJ1KlTqyqlStWqserVq18NbN06dukmsGDRfiRLlq3Ms2nTgm3blqxXuXJr1q0r9W7evCIDBBA8eHBhw4YRJ068mDFjxwEOHJA8eXJly5YxZ868mTNnzgIEhBYtmnTp0qdRo1a9enXrAggQxJYtm3bt2rdx49a9e/du166BBw8+nLgA2L59J1eunLly48ahR48uGnnz5texY8dNnXp376itb98+njx38ODRGxdv3nz75unTxw/O3r17++fly9df/f59/77tt5/lgMf995+BtQ044H71HXggeQsumF6DDz7YnDYEEJChhhpqWEACCYAYYoghIrRIhx2i+CGJJJJoIiEppuhhiy2W+GIdMsq4Yo0u3uhGjinuyGMCPv4I5IxD2ljkGEcimeSSZTRJgJA8Qslkk1TWaOUWUmbZ4pZZdJmkkmAOIeaYZTpx5pNpmonlmES2CcSaQ8o555to2kkDnVXqGQOfWvrpAqBfCuoBoT0amgGiZCoKAKNxOjoBpJJaQGmlj+LJZqWXcqppnZh2KqmojpKqqKmGoiqoqn6yqqerdsIqp6xt0pqmrYtEAAA7")) +]]) + +test_do( add_constant("img", Image.Image(100,100,0,0,0)) ) +test_do( img->box(40,0,0,40) ) +test_equal( img->max(), ({ 0, 0, 0 }) ) +test_do( img->box(10,10,20,20,128,13,42) ) +test_equal( img->max(), ({ 128, 13, 42 }) ) +test_do( img->setcolor(200,19,99) ) +test_do( img->box(30,20,20,30) ) +test_equal( img->max(), ({ 200, 19, 99 }) ) +test_do( add_constant("img") ) + +test_define(test_polygone,[[ +test_any_equal([[ + object img=Image.Image(100,100,0,0,0); + float x=0,y=0.2; + img->setcolor(255,254,253); + img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), + ({20+x,15+y,25+x,15+y,20+x,10+y}), + ({10+x,20+y,15+x,20+y,15+x,25+y}), + ({20+x,25+y,25+x,20+y,20+x,20+y}), + + ({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), + ({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), + ({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), + ({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), + + ({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), + ({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), + ({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), + ({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); + object img1=Image.GIF.decode(MIME.decode_base64( + "R0lGODlhZABkAMQAAAAAAAICAgUFBQoKChYWFigoKC0tLTAwMDIyMjMyMj8/P1lYWFFRUHJycXp5eYyLi6OioaWlpK2srLW0s8vLyszLytbV1Ojn5vTz8vn49/z7+v/+/QAAAAAAAAAAAAAAACwAAAAAZABkAAQF/yAAiONYmiaapivLuu8byzJd1zeO6/ve+z5gMDgkEo3HY1KpZDabTyhUOp1WrVZsNrvlcr3fb1gsJpfLZzRafWSw3Osd4bF7EOLtDCsDx6fmGBs7Gxh2fjgMGYIpG3yHAIAbG4s1k4SGjyaJkyyTjnGRlpQyopd3j5ucjJ59X6Glg6WmhwYICLYst7cGaAW6uro7wMAIBZmZx8jIysvLzc7O0GUOFBTVLNbWDmgKE9nZ1jvg4BMKhwISlp2TEgJrAw0XsrGiFw0DmeiqJuzuePDy1OGod8+Zvk7tMgHcR2qDPXzRAKBjkXAZwB0PI6bwZ4KjM4g1QGrUOJIkSZMnT+6mVKmSZcuWL2HClDlzZk2bNnHmzLmTJ0+fP38GFSqUaNGiR5EiVbp0aVOnTqFGjTqV6hdjKbBadRaBRdetywpoYKFBK9hDEUYB2PD1rB+xajeUdesnbVy2dOPAvTs3bxm7d/H6vapBIL9JfQdbARxYsOIpBxIkkMxi8uQDjx9n1qyZc+fOn0GDFj169CMI4LBlg2D6yAJR6yYtaE0kgAXDIyxZCECbyGuGa2X3rn377u7hvoELRx7EdtzjzIO87jQ7enMLLKBb91HdRPftO3inEA8efHnz5tGnT7+ePXv379/Hly+ffv369/HjPxQCADs=")); + return $1; +]],[[$2]]) +]]) + +test_polygone(img-img1<16, 1) +test_polygone(img->max(), ({255,254,253}) ) + +define(test_polyfill,[[ +test_any_equal([[ + object img=Image.Image(100,100,0,0,0); + float x=0,y=0.2; + img->setcolor(255,254,253); + img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), + ({20+x,15+y,25+x,15+y,20+x,10+y}), + ({10+x,20+y,15+x,20+y,15+x,25+y}), + ({20+x,25+y,25+x,20+y,20+x,20+y}), + + ({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), + ({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), + ({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), + ({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), + + ({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), + ({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), + ({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), + ({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); + + object img1=Image.GIF.decode(MIME.decode_base64( + "R0lGODlhZABkAMQAAAAAAAICAgUFBQoKChYWFigoKC0tLTAwMDIyMjMyMj8/P1lYWFFRUHJycXp5eYyLi6OioaWlpK2srLW0s8vLyszLytbV1Ojn5vTz8vn49/z7+v/+/QAAAAAAAAAAAAAAACwAAAAAZABkAAQF/yAAiONYmiaapivLuu8byzJd1zeO6/ve+z5gMDgkEo3HY1KpZDabTyhUOp1WrVZsNrvlcr3fb1gsJpfLZzRafWSw3Osd4bF7EOLtDCsDx6fmGBs7Gxh2fjgMGYIpG3yHAIAbG4s1k4SGjyaJkyyTjnGRlpQyopd3j5ucjJ59X6Glg6WmhwYICLYst7cGaAW6uro7wMAIBZmZx8jIysvLzc7O0GUOFBTVLNbWDmgKE9nZ1jvg4BMKhwISlp2TEgJrAw0XsrGiFw0DmeiqJuzuePDy1OGod8+Zvk7tMgHcR2qDPXzRAKBjkXAZwB0PI6bwZ4KjM4g1QGrUOJIkSZMnT+6mVKmSZcuWL2HClDlzZk2bNnHmzLmTJ0+fP38GFSqUaNGiR5EiVbp0aVOnTqFGjTqV6hdjKbBadRaBRdetywpoYKFBK9hDEUYB2PD1rB+xajeUdesnbVy2dOPAvTs3bxm7d/H6vapBIL9JfQdbARxYsOIpBxIkkMxi8uQDjx9n1qyZc+fOn0GDFj169CMI4LBlg2D6yAJR6yYtaE0kgAXDIyxZCECbyGuGa2X3rn377u7hvoELRx7EdtzjzIO87jQ7enMLLKBb91HdRPftO3inEA8efHnz5tGnT7+ePXv379/Hly+ffv369/HjPxQCADs=")); + return $1; +]],[[$2]]) +]]) + +test_polyfill(img-img1<16, 1) +test_polyfill(img->max(), ({255,254,253}) ) + +test_true( objectp(Image.Font()) ) +test_eq( Image.Font()->write("hej"), + Image.PNM.decode(MIME.decode_base64("UDQKMTkgMTEK///gv/7gv//grzjglt7gth7gtv7gtv7gtx7g//7g//Hg")) ) +test_eq( Image.Font()->write("h","o"), + Image.PNM.decode(MIME.decode_base64("UDQKNyAyMwr+vr6ulra2trb+/v7+/s62tra2zv7+/g==")) ) + +define(test_blackwhite,[[ + test_equal_any($1,[[ (< Image.Color.white, Image.Color.black >) ]]) +]]) +test_blackwhite([[ + return (multiset)(array)Image.Colortable( + ({Image.Color.white,Image.Color.black})) +]]) +test_blackwhite([[ + object img=Image.Image(100,100)->test(43); + object c=Image.Colortable(({Image.Color.white,Image.Color.black})); + img=c*img; + return (multiset)(array)Image.Colortable(img); +]]) +test_blackwhite([[ + object img=Image.Image(100,100)->test(43); + object c=Image.Colortable(({Image.Color.white,Image.Color.black})); + c->floyd_steinberg(); + img=c*img; + return (multiset)(array)Image.Colortable(img); +]]) +test_blackwhite([[ + object img=Image.Image(100,100)->test(43); + object c=Image.Colortable(({Image.Color.white,Image.Color.black})); + c->ordered(); + img=c*img; + return (multiset)(array)Image.Colortable(img); +]]) + +define(test_coltab,[[ + test_do([[ + object img=Image.Image(200,200)->test(42); + img->tuned_box(50,50,150,150, + ({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); + add_constant("img", img); + ]]) + $1 + test_do( add_constant("img") ) +]]) + +test_coltab([[ + test_do([[ + add_constant("c", Image.Colortable(img,1000)->cubicles(16,16,16,4) ) + ]]) + test_true( sizeof(c)>=200 ) + test_true( img-(c*img)<50 ) + test_do( add_constant("c") ) +]]) + +test_coltab([[ + test_do([[ + add_constant("c", Image.Colortable(32,32,32)->floyd_steinberg() ) + ]]) + test_true( img-(c*img)<50 ) + test_do( add_constant("c") ) +]]) + +test_coltab([[ + test_do([[ + add_constant("c", Image.Colortable(32,32,32)->ordered()) + ]]) + test_true( img-(c*img)<32 ) + test_do( add_constant("c") ) +]]) + + +define(test_encoding,[[ + cond( master()->resolv("Image.$1")->encode,[[ + test_any([[ + object img=Image.Image(100,100)->test(40); + $2 + object img1=Image.$1.decode(Image.$1.encode(img$3)); + return img==img1; + ]],1) + ]]) +]]) + +test_encoding(PNM,,) +test_encoding(GIF,[[ + img = Image.Colortable(img,250)->cubicles(10,10,10,1)-> + floyd_steinberg()*img; +]],) +test_encoding(GIF,[[ + object c=Image.Colortable(img,256)->cubicles(16,16,16,1); + img=c*img; +]],[[,c]]) + +test_any([[ + object img=Image.Image(100,100)->test(43); + object c=Image.Colortable(img,256)->floyd_steinberg()->cubicles(16,16,16); + img=c*img; + object img1=Image.GIF.decode(Image.GIF.encode(img,c)); + return img-img1<50; +]],1) + +test_encoding(AVS,,) +test_encoding(BMP,,) +test_encoding(BMP,[[ + img=Image.Colortable(img,256)*img; +]],[[,(["bpp":8])]]) +test_encoding(BMP,[[ + img=Image.Colortable(img,16)*img; +]],[[,(["bpp":4])]]) +test_encoding(BMP,[[ + img=Image.Colortable(img,2)->floyd_steinberg()*img; +]],[[,(["bpp":1])]]) + +define(test_bmp_rle,[[ + test_any([[ + object img=Image.Image(400,100,Image.Color.red); + img->line(0,0,0,99,Image.Color.green); + img->line(399,0,399,99,Image.Color.blue); + object c=Image.Colortable(img,pow(2,$1)); + img=c*img; + return Image.BMP.decode(Image.BMP.encode(img,(["bpp":$1,"rle":1])))==img; + ]],1) +]]) +test_bmp_rle(8) +test_bmp_rle(4) + +test_encoding(BMP,[[ + img=img->scale(400,100); + object c=Image.Colortable(img,256); + img=c*img; +]],[[,(["bpp":8,"rle":1])]]) +test_encoding(BMP,[[ + img=img->scale(400,100); + object c=Image.Colortable(img,16); + img=c*img; +]],[[,(["bpp":4,"rle":1])]]) + +test_any([[ + object img=Image.Image(256,240)->test(43); + img=Image.Colortable( ({"white","black","red","green"}) )*img; + return Image.HRZ.decode(Image.HRZ.encode(img))==img; +]],1) + +test_encoding(ILBM,[[ + img=Image.Colortable(img,16)*img; +]],) +test_encoding(PCX,,) +test_encoding(PNM,,) +test_encoding(TGA,,) +test_encoding(XBM,[[ + object c=Image.Colortable(({Image.Color.white,Image.Color.black})); + img=c*img; +]],) +test_encoding(XPM,[[ + object c=Image.Colortable(16,16,16); + img=c*img; +]],[[,(["colortable":c]) ]]) +test_encoding(TIFF,,) + +cond( master()->resolv("Image.XFace")->encode,[[ + test_any([[ + object img=Image.Image(48,48)->test(43); + object c=Image.Colortable(({Image.Color.white,Image.Color.black})); + c->floyd_steinberg(); + img=c*img; + return Image.XFace.decode(Image.XFace.encode(img))==img; + ]],1) +]]) + +cond( master()->resolv("Image.JPEG")->encode,[[ + test_any([[ + object img=Image.Image(100,100)->test(43); + object img1=Image.JPEG.decode(Image.JPEG.encode(img,(["quality":100]))); + return img-img1<10; + ]],1) +]]) diff --git a/src/modules/Image/testsuite.in.in b/src/modules/Image/testsuite.in.in deleted file mode 100644 index 01fbb945c4ce452fb1cba332e9d6aed7d2a2f265..0000000000000000000000000000000000000000 --- a/src/modules/Image/testsuite.in.in +++ /dev/null @@ -1,826 +0,0 @@ -// -*- pike -*- -// $Id: testsuite.in.in,v 1.25 2000/07/27 02:29:34 per Exp $ -#module Image.Image -{ -//----------------------------------------------------------------------- -#chapter testsuite - -#test Image.PNM.decode, == - object img1=Image.PNM.decode("P1\n5 5\n0 1 1 1 1\n1 0 1 1 1\n1 1 0 1 1\n1 1 1 0 1\n1 1 1 1 0"); - object img2=Image.PNM.decode("P4\n5 5\nx����"); - if (img1!=img2) fail("differ\n"); - ok(); - -#test MIME.decode_base64 - if ("hejsan, hoppsan" != MIME.decode_base64("aGVqc2FuLCBob3Bwc2Fu\n")) - fail("differ"); - ok(); - -#test Image.GIF.decode, MIME.decode_base64, == - object img1=Image.GIF.decode(MIME.decode_base64("R0lGODlhBQAFAIAAAAAAAP///ywAAAAABQAFAAACCAxwEWrY8BwoADs=")); - object img2=Image.PNM.decode("P4\n5 5\nx\00����"); - if (img1!=img2) fail("differ\n"); - ok(); - -//----------------------------------------------------------------------- -#chapter create - -#test Image.Image() no image - object img=Image.Image(); - if (!img || - img->xsize() || - img->ysize()) fail("have size"); - ok(); - -#test Image.Image() image - object img=Image.Image(100,100); - if (!img || - img->xsize()!=100 || - img->ysize()!=100) fail("wrong size"); - if (img!=0) fail("wrong color"); - ok(); - -#test Image.Image() too big - foreach ( ({0x7fffffff,0x7ffffffff, - 0x7ffffffff,0x7fffffffff,0x7ffffffffff}), - int x) - if (x>0) - { - if (!catch { Image.Image(x,2); }) fail(x+"x2 permitted (This might be correct - do you have "+x+" *2*4 bytes of memory?)"); - if (!catch { Image.Image(x/32768,65537); }) fail((x/32768)+"x65537 permitted"); - if (!catch { Image.Image(x/(32768*3),65537); }) fail((x/(32768*3))+"x65537 permitted"); - } - ok(); - -#test Image.Image() color - object img=Image.Image(1000,1000,17,42,96); - if (!img || - img->xsize()!=1000 || - img->ysize()!=1000) fail("wrong size"); - if (img!=({17,42,96})) fail("wrong color"); - ok(); - -//----------------------------------------------------- -#chapter Image.Color - -#test Image.Color - foreach ( - ({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }), - ({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }), - ({ "cyan", ({ 0, 255, 255 }), ({ 127, 255, 255 }), 168 }), - ({ "green", ({ 0, 255, 0 }), ({ 85, 255, 255 }), 127 }), - ({ "magenta", ({ 255, 0, 255 }), ({ 212, 255, 255 }), 128 }), - ({ "red", ({ 255, 0, 0 }), ({ 0, 255, 255 }), 87 }), - ({ "white", ({ 255, 255, 255 }), ({ 0, 0, 255 }), 255 }), - ({ "yellow", ({ 255, 255, 0 }), ({ 42, 255, 255 }), 214 }) }), - array i) - { - object c1=Image.Color(i[0]); - object c2=Image.Color(@i[1]); - object c3=Image.Color.rgb(@i[1]); - - if (c1!=c2) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "by values != by name"); - if (c1!=c3) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "by rgb() != by name|values"); - - if (c1->r!=i[1][0] || - c1->g!=i[1][1] || - c1->b!=i[1][2]) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "wrong ->r("+c1->r+"), ->g, ->b reported"); - - if (c1->rgb()[0]!=i[1][0] || - c1->rgb()[1]!=i[1][1] || - c1->rgb()[2]!=i[1][2]) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "wrong ->rgb() (" - +c1->rgb()[0]+","+c1->rgb()[1]+","+c1->rgb()[2]+") reported"); - - if (c1->hsv()[0]!=i[2][0] || - c1->hsv()[1]!=i[2][1] || - c1->hsv()[2]!=i[2][2]) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "wrong ->hsv() (" - +c1->hsv()[0]+","+c1->hsv()[1]+","+c1->hsv()[2]+") reported"); - - if (c1->greylevel()!=i[3]) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "wrong ->greylevel() ("+c1->greylevel()+", should be " - +i[3]+") reported"); - - if (c1->grey()->r!=i[3]) - fail("color "+i[0]+" (rgb="+i[1][0]+","+i[1][1]+","+i[1][2]+ - ", hsv="+i[2][0]+","+i[2][1]+","+i[2][2]+") failed; " - "wrong ->grey()->r ("+c1->grey()->r+", should be " - +i[3]+") reported"); - }; - ok(); - -#test indices(Image.Color) - if (!arrayp(indices(Image.Color))) - fail("wrong type\n"); - if (!stringp(indices(Image.Color)[0])) - fail("wrong type of elements\n"); - if (sizeof(indices(Image.Color))<8) - fail("too few colors\n"); - ok(); - -#test values(Image.Color) - if (!arrayp(values(Image.Color))) - fail("wrong type\n"); - if (!objectp(values(Image.Color)[0])) - fail("wrong type of elements\n"); - if (sizeof(indices(Image.Color))!=sizeof(values(Image.Color))) - fail("not the same size of indices() and values()\n"); - ok(); - -#test modifiers (no-crash) - foreach ( - ({ ({ "black", ({ 0, 0, 0 }), ({ 0, 0, 0 }), 0 }), - ({ "blue", ({ 0, 0, 255 }), ({ 170, 255, 255 }), 41 }), - ({ "cyan", ({ 0, 255, 255 }), ({ 127, 255, 255 }), 168 }), - ({ "green", ({ 0, 255, 0 }), ({ 85, 255, 255 }), 127 }), - ({ "magenta", ({ 255, 0, 255 }), ({ 212, 255, 255 }), 128 }), - ({ "red", ({ 255, 0, 0 }), ({ 0, 255, 255 }), 87 }), - ({ "white", ({ 255, 255, 255 }), ({ 0, 0, 255 }), 255 }), - ({ "yellow", ({ 255, 255, 0 }), ({ 42, 255, 255 }), 214 }) }), - array i) - foreach ( ({Image.Color(i[0]),Image.Color.rgb(@i[1])}), object z) - { - z->light(); - z->dark(); - z->neon(); - z->dull(); - z->bright(); - } - ok(); - - -//----------------------------------------------------------------------- -#chapter testsuite II - -#test Image.Image->test(), == - object img=Image.Image(10,10); - img=img->test(42); - if (equal(img->max(),({0,0,0}))) fail("failed"); - img->setpixel(2,2,0,255,0); - if (img==img->invert()) fail("failed"); - ok(); - -//----------------------------------------------------------------------- -#chapter copy - -#test Image.Image->copy - object img=Image.Image(100,100)->test(42); - if (img!=img->copy()) fail("differ"); - if (img->copy(25,25,75,75)!=img->copy(25,25,75,75)) fail("subregion differ"); - if (img->copy(25,25,75,75)==img) fail("subregion doesn't differ"); - img->setpixel(2,2,0,255,0); - if (img->copy()==img->invert()->copy()) fail("copy of other doesn't differ"); - ok(); - -#test Image.Image->clear - object img=Image.Image(100,100)->test(42); - if (img->clear()==img) fail("doesn't differ"); - if (img->clear(0,0,0)!=0) fail("wrong color (black)"); - if (img->clear(1,255,0)!=({1,255,0})) fail("wrong color (color)"); - ok(); - -#test Image.Image->clone - object img=Image.Image(100,100)->test(42); - if (img!=img->clone()) fail("differ"); - img->setpixel(2,2,0,255,0); - if (img->clone()==img->invert()->clone()) fail("clone of other doesn't differ"); - ok(); - -#test Image.Image->find_autocrop - object img=Image.Image(20,20); - img->box(4,4,8,8,Image.Color.red); - img->box(8,8,12,12,Image.Color.green); - img->box(12,4,16,8,Image.Color.blue); - - array z; - if (!equal(z=img->find_autocrop(),({ 4, 4, 16, 12 }))) - fail(sprintf("find_autocrop() returned %O, not %O\n",z,({ 4, 4, 16, 12 }))); - if (!equal(z=img->find_autocrop(5),({ -1, -1, 21, 17 }))) - fail(sprintf("find_autocrop(5) returned %O, not %O\n",z,({ -1, -1, 21, 17 }))); - if (!equal(z=img->find_autocrop(-2),({ 6, 6, 14, 10 }))) - fail(sprintf("find_autocrop(-2) returned %O, not %O\n",z,({ 6, 6, 14, 10 }))); - - if (!equal(z=img->find_autocrop(0,1,0,0,0),({ 4, 0, 19, 19 }))) - fail(sprintf("find_autocrop(0,1,0,0,0) returned %O, not %O\n",z,({ 4, 0, 19, 19 }))); - if (!equal(z=img->find_autocrop(0,0,1,0,0),({ 0, 0, 16, 19 }))) - fail(sprintf("find_autocrop(0,0,1,0,0) returned %O, not %O\n",z,({ 0, 0, 16, 19 }))); - if (!equal(z=img->find_autocrop(0,0,0,1,0),({ 0, 4, 19, 19 }))) - fail(sprintf("find_autocrop(0,0,0,1,0) returned %O, not %O\n",z,({ 0, 4, 19, 19 }))); - if (!equal(z=img->find_autocrop(0,0,0,0,1),({ 0, 0, 19, 12 }))) - fail(sprintf("find_autocrop(0,0,0,0,1) returned %O, not %O\n",z,({ 0, 0, 19, 12 }))); - ok(); - - -#test Image.Image->autocrop - object img=Image.Image(20,20); - img->box(4,4,8,8,Image.Color.red); - img->box(8,8,12,12,Image.Color.green); - img->box(12,4,16,8,Image.Color.blue); - - if (img->autocrop()!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhDQAJAJEAAAAAAP8AAAAA/wD/ACwAAAAADQAJAAECIkwcACDSck5azkE5mb1yaYsNg7gJ\r\nHjCOw3mqI+u5K4y6ZwEAOw=="))) - fail("autocropped (all) image is not correct"); - - if (img->autocrop(0,1,0,0,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhEAAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEAAUAAECOQR8l6rc/SCUc54QcFBCdKFk2XZ4\r\nHniNJHB6ocq1bzYMdYtCtj1YDW/zKYA9IYBoNCaVSmaz+YQ2CgA7"))) - fail("autocropped (0,1,0,0,0) image is not correct"); - - if (img->autocrop(0,0,1,0,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhEQAUAJEAAAAAAP8AAAAA/wD/ACwAAAAAEQAUAAECOgR8l6rc/SCUc1YVQg5KCC80msYd\r\n3xdiZAmgn7h2LqwNg+2m030PFtS7/RpB3/BQPB6Vy2XT6YRGfwUAOw=="))) - fail("autocropped (0,0,1,0,0) image is not correct"); - - if (img->autocrop(0,0,0,1,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhFAAQAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAAQAAECMwQckXEg8kRrQCl2IJT0XNVsUOd9\r\noUhW1zCwIpcebTvEKd3aJF7rFO/zBYVCYrF4RCJjBQA7"))) - fail("autocropped (0,0,0,1,0) image is not correct"); - - if (img->autocrop(0,0,0,0,1)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhFAANAJEAAAAAAP8AAAAA/wD/ACwAAAAAFAANAAECNQR8l6rc/SCUc1ZrQQg7KCGAgsVx\r\n3hGG42Ryn7pC7QnAcdMOg25nyr4b+CbB3RBSFB5/RUsBADs="))) - fail("autocropped (0,0,0,0,1) image is not correct"); - - ok(); - -#test Image.Image->autocrop / border - object img=Image.Image(20,20); - img->box(4,4,8,8,Image.Color.red); - img->box(8,8,12,12,Image.Color.green); - img->box(12,4,16,8,Image.Color.blue); - img->setcolor(255,255,255); - - if (img->autocrop(5)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhFwATAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAFwATAAIDVkiku+0OOgBo\r\nrRdjPPf2H9CFYTiWJbdsQdAGmCDIgkqwrhvPs43nO54Pk9NVeL3KqTgYNJE15arkdA5Kp43ViZ2G\r\ntleT9wPu3lKpYTqdXX/abnX8TUgAADs="))) - fail("autocropped (border) image is not correct"); - ok(); - - if (img->autocrop(5,0,0,0,1)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhHgAXAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAHgAXAAIDbUiku+0Oxjgp\r\ntfdmrXnvHwiKIwEAJ4qq67qOrhvLKEzTt43jrg4EAWBgJRAUBS+QKxgcooxGZE25agaJUSnAZ3UC\r\nslpuczAgg5MdXrk8wPlc7LKbSou3ae+VfZ7m8dAaf39TfYM8eYaAF4mHEQkAOw=="))) - fail("autocropped (5,0,0,0,1) image is not correct"); - - if (img->autocrop(5,0,0,1,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhHgAaAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAHgAaAAIDdEiku+0OxjgJ\r\nABdjvfemlOeJIwZGZZkCp6OqZbt4QVAHmyDowifTNltut/O1gMEh0XhCCjHEoum3CQYGA2y0Nz2q\r\nstmBSmb5hsUxaumMHpFh7LEaBmPN63IvHvbe8+9+TCCBeU2EbmRkiYqKjI2Nj5CQko0JADs="))) - fail("autocropped (5,0,0,1,0) image is not correct"); - - if (img->autocrop(5,0,1,0,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhGwAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAGwAeAAIDfEiku+0Oxjgp\r\ntfdmrXnvHwheAFCaJpqmqcayL2y6slzTts3iQBD4gZRAMBS0SKnfL2giEo0zpGn5Ez6hAB6VCbhi\r\ntcvBQOw9UnTj8cDGY6nHbCnsvZa1U/T4WaczR/p9UXuBOneEfg6HhXKKiAuNdiMjkpOTlZaWmJmZ\r\nHQkAOw=="))) - fail("autocropped (5,0,1,0,0) image is not correct"); - - if (img->autocrop(5,1,0,0,0)!= - Image.GIF.decode(MIME.decode_base64( - "R0lGODlhGgAeAKIAAAAAAP8AAAAA/wD/AP///wAAAAAAAAAAACwAAAAAGgAeAAIDekiku+0Oxjgp\r\ntfdmrXnvH3gBAFmWJ4qi47q6L9DGcTzXNUutQdAHKIFAKNBFeD5fcDg0OpDJJdO5gCpLzGbplgwM\r\nBt9scburgcGD2m2FBqvLsXbaBn/J38dcjkrY78l5fzlrgiuEhYBPiHSBi3wiIpCRkZOUlJaXlwQJ\r\nADs="))) - fail("autocropped (5,1,0,0,0) image is not correct"); - - - ok(); - -//----------------------------------------------------------------------- -#chapter testsuite III - -#test equal, copy_value - array a=({0,0,0}); - array b=copy_value(a); b[0]=17; b[1]=42; b[2]=128; - if (!equal( ({0,0,0}), a)) fail("differ (1)"); - if (!equal( ({17,42,128}), b)) fail("differ (2)"); - ok(); - -#test Image.Image->max() - if (!equal( ({0,0,0}), - Image.Image(10,10,0,0,0)->max() )) - fail("erranous (1)"); - if (!equal( ({17,42,36}), - Image.Image(10,10,17,42,36)->max() )) - fail("erranous (2)"); - if (!equal( ({17,42,36}), - Image.Image(10,10,0,0,0) - ->setpixel(5,5,17,42,36)->max() )) - fail("erranous (3)"); - if (!equal( ({17,42,36}), - Image.Image(10,10,0,0,0) - ->setpixel(2,2,1,2,3) - ->setpixel(3,3,17,42,36) - ->setpixel(4,4,3,2,1) - ->max())) - fail("erranous (4)"); - if (!equal( ({17,42,36}), - Image.Image(10,10,0,0,0) - ->setpixel(2,2,17,2,3) - ->setpixel(3,3,2,42,5) - ->setpixel(4,4,3,2,36) - ->max())) - fail("erranous (5)"); - ok(); - -//----------------------------------------------------------------------- -#chapter plain - -#test setpixel, getpixel - object img=Image.Image(10,10,255,0,0); - if (!equal(img->getpixel(5,5),({255,0,0}))) fail("getpixel erranous"); - img->setpixel(5,5,1,2,3); - if (!equal(img->getpixel(5,5),({1,2,3}))) fail("failed"); - ok(); - -#test setpixel alpha - object img=Image.Image(10,10,255,0,0); - img->setpixel(5,5,0,255,0,127); - if (!equal(img->getpixel(5,5),({127,128,0}))) fail("failed"); - ok(); - -#test Image.Image->line structure - object img=Image.Image(100,100,0,0,0); - foreach (({40,50,60}),int z) - { - img->line(50-z,0,50,50,255,255,255); - img->line(50-z,100,50,50,255,255,255); - img->line(100,50+z,50,50,255,255,255); - img->line(100,50-z,50,50,255,255,255); - } - object img1=Image.GIF.decode(MIME.decode_base64( - "R0lGODlhZABkAIAAAAAAAP///ywAAAAAZABkAAAC/wxwiGC7/l6UktZ6Mdatdr9toSiSZQmCjPihqPu+MdLST23Lsr7vGF7DrXw+YhEF3AiFx2NTFiwtnU5qMYpUVqvbrAT7/XG5Y3HYfD6TyWsw+vZms68qaTw3n/tazE/AvcCkpwcH95OkFkhIaGdYdwfIyDikePeIVzk5yacFdUmpOcfpIUiaiBnK5Wfp6YiaerT6SecKCrtX++o0mnnb+vrHyKvr+xgpKttbbDxLmGy77Hi86VoK28FnrfesTY3a7VwdjTc8HowJToZ9Ok6unLoemA6fOR+L3u5Fab/T8JzfaR89UPyKnYsnjFzBaP6IVWnoEGAjiKLcSXyYY6EihP8Xd2VkY8Cfxo7BKN4z2RHkCn4hI6Y8CS0LypcVW/ZbOZImCJsvSuq85hMJz5/wzrEYSrRonz85kwoFYtSpwagMqEr1xfRG06u4aGzliusrWFpjASIta1Ae2qnYrK51RjXr201u5c5FttTt3X561YqVmtVa0L2ezooxTDgM4sNVE2tZ/Njl25Ysh/zNF7SgzcsMP6qzzPkWxJEUQ4caHU4gWtQJVXM9+E7lPtOq6g38RxNhaJO0u7oeSFCn7mUc+07t1ft3zLTI23Fcfk0cZmXJg8cmTp02N5K5OEctN/3d33LVWXT3Rv0nbuM3a5XvmQv6r2+A47ME/35+zHmR8rdPj82eeM2ox45k/a1WoHwHrgWeLlYhwmCC31ni32cJWkYhYdM4yAqCEmboGDTdTBGiiPB1eNeGy1UIXHwrljjLNCxi9UYfMAZkiI034hhIAQA7")); - if (img!=img1) fail("differ"); - ok(); - -#test Image.Image->line color - object img=Image.Image(100,100,0,0,0); - img->line(40,0,0,40); - if (!equal( ({0,0,0}), img->max() )) fail("differ (reset)"); - img->line(10,10,20,20,128,13,42); - if (!equal( ({128,13,42}), img->max() )) fail("differ (direct)"); - img->setcolor(200,19,99); - img->line(30,20,20,30); - if (!equal( ({200,19,99}), img->max() )) fail("differ (setcolor)"); - ok(); - -#test Image.Image->box structure - object img=Image.Image(100,100,0,0,0); - foreach (({40,60,50}),int z) - { - img->box(z,0,50,50,255,z,255); - img->box(z,100,50,50,255,z,0); - img->box(100,z,50,50,0,z,255); - img->box(0,z,50,50,0,z,0); - } - object img1=Image.GIF.decode(MIME.decode_base64( - "R0lGODlhZABkALMAAAAAAAAyAAA8AAAoAP8oAP8yAAAo/wAy/wA8//88AP8o//8y//88/wAAAAAAAAAAACwAAAAAZABkAAME/xAAOWe1Fue8OVAKGIbhwjAniqKe17ouHMcznZEkbq7rats/IFA4nORypV6PVSw2nU4bErlb+qJRbDY7zVWtjO1WPKZ1SV9rubxmf86K9NLtpkfhcfC1XudL4XI9fX2DZoB6TISEijeHiIuLkBZ4gXuRkYSUiGGYmJmOep6efZqPo6NspaGoqGOqYK2tW69qsrJOtHO3t0O5gry8f2eVicHBHr6Wx8eToLDMzI3Dm9HRzdOm1tHJxdrB3Jzex+DizOTl38616Lfn7LLu76jx8p709ZH3+J/Yq/uY+v65CSiwDMGCs9TpYjZgQEOHDiFGjDiRIkWLFy9mJMbAgAGPH/8/hhQpkmTJkidRatS4kiVLly8HcESJkmbNmjdLxoy5kydPhzNx4hQ6dOjPn0eRUgxatGjTokqVRuXJ1KlTqyqlStWqserVq18NbN06dukmsGDRfiRLlq3Ms2nTgm3blqxXuXJr1q0r9W7evCIDBBA8eHBhw4YRJ068mDFjxwEOHJA8eXJly5YxZ868mTNnzgIEhBYtmnTp0qdRo1a9enXrAggQxJYtm3bt2rdx49a9e/du166BBw8+nLgA2L59J1eunLly48ahR48uGnnz5texY8dNnXp376itb98+njx38ODRGxdv3nz75unTxw/O3r17++fly9df/f59/77tt5/lgMf995+BtQ044H71HXggeQsumF6DDz7YnDYEEJChhhpqWEACCYAYYoghIrRIhx2i+CGJJJJoIiEppuhhiy2W+GIdMsq4Yo0u3uhGjinuyGMCPv4I5IxD2ljkGEcimeSSZTRJgJA8Qslkk1TWaOUWUmbZ4pZZdJmkkmAOIeaYZTpx5pNpmonlmES2CcSaQ8o555to2kkDnVXqGQOfWvrpAqBfCuoBoT0amgGiZCoKAKNxOjoBpJJaQGmlj+LJZqWXcqppnZh2KqmojpKqqKmGoiqoqn6yqqerdsIqp6xt0pqmrYtEAAA7")); - if (img!=img1) fail("differ"); - ok(); - -#test Image.Image->box color - object img=Image.Image(100,100,0,0,0); - img->box(40,0,0,40); - if (!equal( ({0,0,0}), img->max() )) fail("differ (reset)"); - img->box(10,10,20,20,128,13,42); - if (!equal( ({128,13,42}), img->max() )) fail("differ (direct)"); - img->setcolor(200,19,99); - img->box(30,20,20,30); - if (!equal( ({200,19,99}), img->max() )) fail("differ (setcolor)"); - ok(); - -//----------------------------------------------------- -#chapter advanced drawing - -#test Image.Image->polyfill 1 (right triangle 0.0, 0.2) - object img=Image.Image(100,100,0,0,0); - float x=0,y=0.2; - img->setcolor(255,254,253); - img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), - ({20+x,15+y,25+x,15+y,20+x,10+y}), - ({10+x,20+y,15+x,20+y,15+x,25+y}), - ({20+x,25+y,25+x,20+y,20+x,20+y}), - - ({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), - ({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), - ({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), - ({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), - - ({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), - ({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), - ({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), - ({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); - - object img1=Image.GIF.decode(MIME.decode_base64( - "R0lGODlhZABkAMQAAAAAAAICAgUFBQoKChYWFigoKC0tLTAwMDIyMjMyMj8/P1lYWFFRUHJycXp5eYyLi6OioaWlpK2srLW0s8vLyszLytbV1Ojn5vTz8vn49/z7+v/+/QAAAAAAAAAAAAAAACwAAAAAZABkAAQF/yAAiONYmiaapivLuu8byzJd1zeO6/ve+z5gMDgkEo3HY1KpZDabTyhUOp1WrVZsNrvlcr3fb1gsJpfLZzRafWSw3Osd4bF7EOLtDCsDx6fmGBs7Gxh2fjgMGYIpG3yHAIAbG4s1k4SGjyaJkyyTjnGRlpQyopd3j5ucjJ59X6Glg6WmhwYICLYst7cGaAW6uro7wMAIBZmZx8jIysvLzc7O0GUOFBTVLNbWDmgKE9nZ1jvg4BMKhwISlp2TEgJrAw0XsrGiFw0DmeiqJuzuePDy1OGod8+Zvk7tMgHcR2qDPXzRAKBjkXAZwB0PI6bwZ4KjM4g1QGrUOJIkSZMnT+6mVKmSZcuWL2HClDlzZk2bNnHmzLmTJ0+fP38GFSqUaNGiR5EiVbp0aVOnTqFGjTqV6hdjKbBadRaBRdetywpoYKFBK9hDEUYB2PD1rB+xajeUdesnbVy2dOPAvTs3bxm7d/H6vapBIL9JfQdbARxYsOIpBxIkkMxi8uQDjx9n1qyZc+fOn0GDFj169CMI4LBlg2D6yAJR6yYtaE0kgAXDIyxZCECbyGuGa2X3rn377u7hvoELRx7EdtzjzIO87jQ7enMLLKBb91HdRPftO3inEA8efHnz5tGnT7+ePXv379/Hly+ffv369/HjPxQCADs=")); - if (!(img-img1<16)) fail("differ too much"); - if (!equal(img->max(),({255,254,253}))) fail("wrong maxcolor"); - ok(); - -#test Image.Image->polyfill 2 (right triangle -0.2, -0.2) - object img=Image.Image(100,100,0,0,0); - float x=-0.2,y=-0.2; - img->setcolor(255,254,253); - img->polygone(({10+x,15+y,15+x,10+y,15+x,15+y}), - ({20+x,15+y,25+x,15+y,20+x,10+y}), - ({10+x,20+y,15+x,20+y,15+x,25+y}), - ({20+x,25+y,25+x,20+y,20+x,20+y}), - - ({30+2*10+x,15+y,30+2*15+x,10+y,30+2*15+x,15+y}), - ({30+2*20+x,15+y,30+2*25+x,15+y,30+2*20+x,10+y}), - ({30+2*10+x,20+y,30+2*15+x,20+y,30+2*15+x,25+y}), - ({30+2*20+x,25+y,30+2*25+x,20+y,30+2*20+x,20+y}), - - ({10+x,30+2*15+y,15+x,30+2*10+y,15+x,30+2*15+y}), - ({20+x,30+2*15+y,25+x,30+2*15+y,20+x,30+2*10+y}), - ({10+x,30+2*20+y,15+x,30+2*20+y,15+x,30+2*25+y}), - ({20+x,30+2*25+y,25+x,30+2*20+y,20+x,30+2*20+y})); - - object img1=Image.GIF.decode(MIME.decode_base64( - "R0lGODlhZABkANUAAAAAAAICAgUFBQcHBwoKChQUFBYWFh4eHiMjIyYmJS0tLTAwMDMyMigoKFFRUFlYWHp5eX9+fnJycYyLi56dnDIyMqOioaWlpMHBwMvLyszLytHQz9bV1Orp6Ojn5vTz8vz7+v/+/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAZABkAAUG/0AAQDgcFo1GZDK5ZDKdz2dUKqVWq1csVrvddr1ecDg8JpPN53NarWa32284XD6f1+12fD6/5/P9f3+BgoKEhYVqAkmKiGQEWAMBjW0FFEkMEZNYBhMYWBUcD5KaWwUbGZchmaRGnB8hqFUVISGho6xJprCpqqyutLuywLWiuEO6wUMMwKuIv8OxUrPDxLeTAhQZGRkWSQ3b2w6FAQ8Y4ODcWN/o4BYNxsbw8fHz9PT29/f5ggIMDP7vjBD49w/BuAUECf4LKGWgQoUHWEUAFg3AMlodFCBqcAEEtWRPplHzIOGRRFoVL2bUxNEjxU8jS9KbmDLESlYtUcKkRdLkvf8IKW8aa1mRyaye+pKIM4JAo74GELAkkJk0aVWrVrFmzbqVK1evX7+GFSuWbNmyZ9GiVbt2bVu3buHGjTuXLl27d+/m1auXb9++fwEDFjx4cGHDhvlYs5b43oMkCxg2jmfAkxEGFybfm5AShGTNmgx8qJkZNKsJIJd5Nh36Vc0QpVkjQp2a1mrZgkTrvAwsNu48tGvb/vxbDQFz27oZWbctavHiz6FDlz59enXr1rFnz152QIUK3yUTAA8+AfczATi85A1MwvkzD9YrA+bB5/st6XfPp+X+Ppn4wtXnHxn5vdbfgGHEV5OACIaRXk0HNujFAykxKKEXASinTIQXbiEk2QH2ddihiCOOWKKJJqKYYoorssiiiy++GKOMMtJYY4034hYEADs=")); - if (!(img-img1<16)) fail("differ too much"); - if (!equal(img->max(),({255,254,253}))) fail("wrong maxcolor"); - ok(); - -//----------------------------------------------------- -#chapter Image.Font - -#test instansiating default font - if (!objectp(Image.Font())) fail("not object"); - ok(); - -#test writing simple text with default font - object f=Image.Font(); - object i=f->write("hej"); - if (i!=Image.PNM.decode(MIME.decode_base64("UDQKMTkgMTEK///gv/7gv//grzjglt7gth7gtv7gtv7gtx7g//7g//Hg"))) - fail("incorrect"); - ok(); - -#test writing multiple lines with default font - object f=Image.Font(); - object i=f->write("h","o"); - if (i!=Image.PNM.decode(MIME.decode_base64("UDQKNyAyMwr+vr6ulra2trb+/v7+/s62tra2zv7+/g=="))) - fail("incorrect"); - ok(); - - -//----------------------------------------------------- -#chapter Image.Colortable - -#test colortable - black/white init & cast - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - array z=(array)c; - if (sizeof(z)!=2) - fail("didn't get two colors (black and white): "+((array(string))c)*", "); - if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && - (z[1]!=Image.Color.black || z[0]!=Image.Color.white)) - fail("didn't get black and white: "+((array(string))z)*", "); - ok(); - -#test colortable - black/white normal - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - img=c*img; - array z=(array)Image.Colortable(img); - if (sizeof(z)!=2) - fail("didn't get two colors (black and white): "+((array(string))z)*", "); - if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && - (z[1]!=Image.Color.black || z[0]!=Image.Color.white)) - fail("didn't get black and white: "+((array(string))z)*", "); - ok(); - -#test colortable - black/white floyd-steinberg - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - c->floyd_steinberg(); - img=c*img; - array z=(array)Image.Colortable(img); - if (sizeof(z)!=2) - fail("didn't get two colors (black and white): "+((array(string))z)*", "); - if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && - (z[1]!=Image.Color.black || z[0]!=Image.Color.white)) - fail("didn't get black and white: "+((array(string))z)*", "); - ok(); - -#test colortable - black/white ordered - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - c->ordered(); - img=c*img; - array z=(array)Image.Colortable(img); - if (sizeof(z)!=2) - fail("didn't get two colors (black and white): "+((array(string))z)*", "); - if ((z[0]!=Image.Color.black || z[1]!=Image.Color.white) && - (z[1]!=Image.Color.black || z[0]!=Image.Color.white)) - fail("didn't get black and white: "+((array(string))z)*", "); - ok(); - -#test colortable - standard - object img=Image.Image(200,200)->test(42); - img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); - object c=Image.Colortable(img,1000)->cubicles(16,16,16,4); - if (sizeof(c)<200) fail("too few colors"); - object img1=(c*img); - if (!(img-img1<50)) fail("differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - -#test colortable - floyd-steinberg - object img=Image.Image(200,200)->test(42); - img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); - object c=Image.Colortable(32,32,32)->floyd_steinberg(); - object img1=(c*img); - if (!(img-img1<50)) fail("differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - -#test colortable - ordered - object img=Image.Image(200,200)->test(42); - img->tuned_box(50,50,150,150,({({0,0,0}),({255,0,0}),({0,255,0}),({0,0,255})})); - object c=Image.Colortable(32,32,32)->ordered(); - object img1=(c*img); - if (!(img-img1<32)) fail("differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - - -//----------------------------------------------------- -#chapter encoding/decoding - -#test Image.PNM.encode/decode - object img=Image.Image(100,100)->test(40); - object img1=Image.PNM.decode(Image.PNM.encode(img)); - if (img!=img1) fail("differ"); - ok(); - -#test Image.GIF.encode/decode - object img=Image.Image(100,100)->test(41); - object c=Image.Colortable(img,250)->cubicles(10,10,10,1)->floyd_steinberg(); - img=c*img; - object img1=Image.GIF.decode(Image.GIF.encode(img)); - if (img!=img1) fail("differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - -#test Image.GIF.encode/decode colortable - object img=Image.Image(100,100)->test(42); - object c=Image.Colortable(img,256)->cubicles(16,16,16,1); - img=c*img; - object img1=Image.GIF.decode(Image.GIF.encode(img,c)); - if (img!=img1) fail("differ ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - -#test Image.GIF.encode/decode colortable w/ floyd-steinberg - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,256)->floyd_steinberg()->cubicles(16,16,16); - img=c*img; - object img1=Image.GIF.decode(Image.GIF.encode(img,c)); - if (!(img-img1<50)) fail("differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - ok(); - -#test Image.AVS.encode/decode - object img=Image.Image(100,100)->test(43); - if (Image.AVS.decode(Image.AVS.encode(img))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (truecolor) - object img=Image.Image(100,100)->test(43); - if (Image.BMP.decode(Image.BMP.encode(img))!=img) fail("differ"); - ok(); - - -#test Image.BMP.encode/decode (8bpp) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,256); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (4bpp) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,16); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (1bpp) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,2)->floyd_steinberg(); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":1])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (8bpp rle first) - object img=Image.Image(400,100,Image.Color.red); - img->line(0,0,0,99,Image.Color.green); - img->line(399,0,399,99,Image.Color.blue); - object c=Image.Colortable(img,256); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8,"rle":1])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (4bpp rle first) - object img=Image.Image(400,100,Image.Color.red); - img->line(0,0,0,99,Image.Color.green); - img->line(399,0,399,99,Image.Color.blue); - object c=Image.Colortable(img,16); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4,"rle":1])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (8bpp rle second) - object img=Image.Image(100,100)->test(99)->scale(400,100); - object c=Image.Colortable(img,256); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":8,"rle":1])))!=img) fail("differ"); - ok(); - -#test Image.BMP.encode/decode (4bpp rle second) - object img=Image.Image(100,100)->test(99)->scale(400,100); - object c=Image.Colortable(img,16); - img=c*img; - if (Image.BMP.decode(Image.BMP.encode(img,(["bpp":4,"rle":1])))!=img) fail("differ"); - ok(); - -#test Image.HRZ.encode/decode - object img=Image.Image(256,240)->test(43); - img=Image.Colortable( ({"white","black","red","green"}) )*img; - if (Image.HRZ.decode(Image.HRZ.encode(img))!=img) fail("differ"); - ok(); - -#test Image.ILBM.encode/decode (4bpp) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,16); - img=c*img; - if (Image.ILBM.decode(Image.ILBM.encode(img))!=img) fail("differ"); - ok(); - -#test Image.PCX.encode/decode - object img=Image.Image(100,100)->test(43); - if (Image.PCX.decode(Image.PCX.encode(img))!=img) fail("differ"); - ok(); - -#test Image.PNM.encode/decode - object img=Image.Image(100,100)->test(43); - if (Image.PNM.decode(Image.PNM.encode(img))!=img) fail("differ"); - ok(); - -#test Image.TGA.encode/decode - object img=Image.Image(100,100)->test(43); - if (Image.TGA.decode(Image.TGA.encode(img))!=img) fail("differ"); - ok(); - -#test Image.XBM.encode/decode - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - img=c*img; - if (Image.XBM.decode(Image.XBM.encode(img))!=img) fail("differ"); - ok(); - -// #test Image.XCF.decode (no crash) -// #if constant(Image.XCF.decode) -// object img=Image.Image(100,100)->test(43); -// Image.XCF.decode(); -// #else -// werror(" (Image.XCF not available) "); -// #endif -// ok(); - -#test Image.XPM.encode/decode (16 colors) - #if constant(Image.XPM.encode) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(img,16); - img=c*img; - if (Image.XPM.decode(Image.XPM.encode(img,(["colortable":c])))!=img) - fail("differ"); - #else - werror(" (Image.XPM not available) "); - #endif - ok(); - -#test Image.XPM.encode/decode (4096 colors) - #if constant(Image.XPM.encode) - object img=Image.Image(100,100)->test(43); - object c=Image.Colortable(16,16,16); - img=c*img; - if (Image.XPM.decode(Image.XPM.encode(img,(["colortable":c])))!=img) - fail("differ"); - #endif - ok(); - -#test Image.TIFF.encode/decode - #if constant(Image.TIFF.encode) - object img=Image.Image(100,100)->test(43); - if (Image.TIFF.decode(Image.TIFF.encode(img))!=img) fail("differ"); - #else - werror(" (Image.TIFF not available) "); - #endif - ok(); - -#test Image.XFace.encode/decode - #if constant(Image.XFace.encode) - object img=Image.Image(48,48)->test(43); - object c=Image.Colortable(({Image.Color.white,Image.Color.black})); - c->floyd_steinberg(); - img=c*img; - if (Image.XFace.decode(Image.XFace.encode(img))!=img) fail("differ"); - #else - werror(" (Image.XFace not available) "); - #endif - ok(); - -#test Image.JPEG.encode/decode - #if constant(Image.JPEG.encode) - object img=Image.Image(100,100)->test(43); - object img1=Image.JPEG.decode(Image.JPEG.encode(img,(["quality":100]))); - if (!(img-img1<10)) fail("differ too much ("+(img-img1)->max()[0]+","+(img-img1)->max()[1]+","+(img-img1)->max()[2]+","+")"); - #else - werror(" (Image.JPEG not available) "); - #endif - ok(); - - -//----------------------------------------------------- -// #chapter Computer Vision Functions - -// #test make_ascii -// #if constant(Image.JPEG.encode) -// object Stina=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAABgcABQgE/8QANhAAAgEEAAQDAwkJAAAAAAAAAQIDAAQFEQYSITEHE3EiQYEUMjNCYXOhscEVIzY3UVJicsL/xAAZAQACAwEAAAAAAAAAAAAAAAACBAABAwX/xAAdEQACAgMBAQEAAAAAAAAAAAABAgARAyExEjJB/9oADAMBAAIRAxEAPwBcXMazCMT3wOjyhAOpPpXaOEs2bIXdhib2WJVIJW31sfO3vfpXXaWlrd35SUDn0PLHYg9/0p44HiS1yWIgCSwRXcQ8uW3kl8vlK9NjferZ1X65JlORVtBZmW7iSWFJreTzUZG5ikq6ZTrtqtQ+EuLixvh7jm8tRLcp5khDdT16b+FLDxltcZe5DFXWPlglyLs0d38nYHYGtA6+3dPvERfJ8JYwBQnJbouh00eUVRbViXbeR67MzeIRi4f8QLlLNFhVFdF+tok73+PauK3s5r20DLEsS82/PufYD0x48Ri8/wCPGVkybQPBYBWSCYjTyFQOx79wfhTNzj4+2w8sV9bxtC6FEhZRo9PcKFcwA3I7MpAAmbplvYomtXijcluUSxN8emvdRH4XAW0eYLHmlWVUHOSTqhG/hW1zTShnWLQ1pui9e1GvhwD+xrqYczefcMQT3IFBme01GMCn1uC1/byTsGtWKuDtXB67qxsM0l9bbyYhM8Oo9gA85Hp1owfwltZnaK1y1xBNolY/L3v0oLfgjHxZg2drkMjLfxvp0ktBErH7Dvr/AEregTMzctsJjocnx5gbVIIzbef50qqhGuXZ0a0Yw6dunuA+ND/CmDhxOItWe3C3xQhmce0P8d1ci7jZuQnUv9g70LVwQCSxiu8ROBpJc1LxJas0qzRrHcQbJ0yjQZT6dDSxzWdFgqRq9xJMy8qhm3yDtqtSMiSRGN0DK406nsd96UOd8PcFJxiTc/uIki505j0cH6o9DUpSNw1Y3UR7Jc3kq24V3uJ/ZCjZK799PPCY6LA4a2s9FgqDm9nR37/xroseG8bip2nsrSAvrQk5tsBVkyEqpCk/HdJ5snrQjmJaNmWkP0ll/sPzpdZz+Z0Hr/1UqU4nYs3I9F+ji9BVUf4kP3VSpVHsyWWMvYeo/OhTjT59v92f1qVKFvmFj+oL475g9Ksrbs1SpSB7Oj+T/9k=")); - -// array(object) Stina4; -// Stina4=Stina->orient4(); -// Stina4[1]*=215; -// Stina4[3]*=215; -// string foo=Stina->make_ascii(@Stina4,40,2,4); -// if (foo[0..200]!= -// " /* *| || \n /-\\*-\\ */ || ----- || \n /* \\\\\\|| ||/// \\*\\ | \n +\\*-**|/| ||*X // | | \n \\\\ |* \\*\\--- // */ \n \\- |*| \\\\\\ // // \n ---/--//// \\\\\\//--// \n -\\*-|// \\|- \n1\0\0\0P\24\20@P\24\20@\b\0\0\08\0\0\0\4\0\6\0\200\35 \b\6\0\0\0\n"[0..200]) fail("Wrong ascii-picture"); -// #endif -// ok(); - -// #test match_X float, object, void|object, void|int -// #if constant(Image.JPEG.encode) - -// object Stina=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAABgcABQgE/8QANhAAAgEEAAQDAwkJAAAAAAAAAQIDAAQFEQYSITEHE3EiQYEUMjNCYXOhscEVIzY3UVJicsL/xAAZAQACAwEAAAAAAAAAAAAAAAACBAABAwX/xAAdEQACAgMBAQEAAAAAAAAAAAABAgARAyExEjJB/9oADAMBAAIRAxEAPwBcXMazCMT3wOjyhAOpPpXaOEs2bIXdhib2WJVIJW31sfO3vfpXXaWlrd35SUDn0PLHYg9/0p44HiS1yWIgCSwRXcQ8uW3kl8vlK9NjferZ1X65JlORVtBZmW7iSWFJreTzUZG5ikq6ZTrtqtQ+EuLixvh7jm8tRLcp5khDdT16b+FLDxltcZe5DFXWPlglyLs0d38nYHYGtA6+3dPvERfJ8JYwBQnJbouh00eUVRbViXbeR67MzeIRi4f8QLlLNFhVFdF+tok73+PauK3s5r20DLEsS82/PufYD0x48Ri8/wCPGVkybQPBYBWSCYjTyFQOx79wfhTNzj4+2w8sV9bxtC6FEhZRo9PcKFcwA3I7MpAAmbplvYomtXijcluUSxN8emvdRH4XAW0eYLHmlWVUHOSTqhG/hW1zTShnWLQ1pui9e1GvhwD+xrqYczefcMQT3IFBme01GMCn1uC1/byTsGtWKuDtXB67qxsM0l9bbyYhM8Oo9gA85Hp1owfwltZnaK1y1xBNolY/L3v0oLfgjHxZg2drkMjLfxvp0ktBErH7Dvr/AEregTMzctsJjocnx5gbVIIzbef50qqhGuXZ0a0Yw6dunuA+ND/CmDhxOItWe3C3xQhmce0P8d1ci7jZuQnUv9g70LVwQCSxiu8ROBpJc1LxJas0qzRrHcQbJ0yjQZT6dDSxzWdFgqRq9xJMy8qhm3yDtqtSMiSRGN0DK406nsd96UOd8PcFJxiTc/uIki505j0cH6o9DUpSNw1Y3UR7Jc3kq24V3uJ/ZCjZK799PPCY6LA4a2s9FgqDm9nR37/xroseG8bip2nsrSAvrQk5tsBVkyEqpCk/HdJ5snrQjmJaNmWkP0ll/sPzpdZz+Z0Hr/1UqU4nYs3I9F+ji9BVUf4kP3VSpVHsyWWMvYeo/OhTjT59v92f1qVKFvmFj+oL475g9Ksrbs1SpSB7Oj+T/9k=")); - -// object Stinamini=Stina->copy(10, 5, 15, 25); -// object Stinares=Stina->match_norm(0.00002, Stinamini, -// Image.Image(63,33)->polyfill(({0,0,60,0,60,30})), 10); -// object expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAYFAwII/8QAJhAAAQMDAwQCAwAAAAAAAAAAAAECBAMFERKi0RMVIVExQzNBkv/EABkBAQADAQEAAAAAAAAAAAAAAAABAgMFBP/EACMRAAEDBAICAwEAAAAAAAAAAAEAAgQDBRHREqEUcRUhMVH/2gAMAwEAAhEDEQA/APn8GxaYMeTFc+tT1OR6pnUqeMJ6NFLJEc3LaK/0vJ53yWMOCuxHskmRTFRhGD70pYFG+1RGfNHcvIp2uG5MrR3LyR5TMZVvgpPLjkd6U4Ch7ZE1Y6O5eTq2zRFTK0dy8gymBG2KS78I70pkFP2mCnzR3u5Mm6xaEZaXRZp1Zz5VfXssyQ17uIWUq0V41M1XkYH8zpdrVPoRYzmVX6XK9VxhV/SGgl5iJ9+1eCYBD4zHHJVo96kUKYpsAwPe1RVbrFev5tq8Htl0hNbha213BNAjxWYx9q4vskO5Yb3tUC3OIj8pW2rwde8xcY621eCaAMVhRt9kt/AO9qiddYq/btXgzbnJoyEpdJ+rTnPhU9GeC7KDWHIWEi615FM03gYPvaAA2XMQABEAARAAEX//2Q==" -// )); -// if (!(Stinares-expected_result<80)) -// fail("->match_norm(float f, object needle, object haystack_avoid, int foo) differ too much"); - -// Stinares=Stina->match_norm(0.00002, Stinamini); -// expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAYFAwII/8QAJhAAAQMDAwQCAwAAAAAAAAAAAAECBAMFERKi0RMVIVExQzNBkv/EABkBAQADAQEAAAAAAAAAAAAAAAABAgMFBP/EACMRAAEDBAICAwEAAAAAAAAAAAEAAgQDBRHREqEUcRUhMVH/2gAMAwEAAhEDEQA/APn8GxaYMeTFc+tT1OR6pnUqeMJ6NFLJEc3LaK/0vJ53yWMOCuxHskmRTFRhGD70pYFG+1RGfNHcvIp2uG5MrR3LyR5TMZVvgpPLjkd6U4Ch7ZE1Y6O5eTq2zRFTK0dy8gymBG2KS78I70pkFP2mCnzR3u5Mm6xaEZaXRZp1Zz5VfXssyQ17uIWUq0V41M1XkYH8zpdrVPoRYzmVX6XK9VxhV/SGgl5iJ9+1eCYBD4zHHJVo96kUKYpsAwPe1RVbrFev5tq8Htl0hNbha213BNAjxWYx9q4vskO5Yb3tUC3OIj8pW2rwde8xcY621eCaAMVhRt9kt/AO9qiddYq/btXgzbnJoyEpdJ+rTnPhU9GeC7KDWHIWEi615FM03gYPvaAA2XMQABEAARAAEX//2Q==" -// )); -// if (!(Stinares-expected_result<80)) -// fail("->match_norm(float f, object needle) differ too much"); - -// Stinares=Stina->match(0.00002, Stinamini); -// expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAUGAwII/8QAJhAAAgAFBAEEAwAAAAAAAAAAAAECBAURogMSE9EhM0NRUxUxQf/EABkBAAIDAQAAAAAAAAAAAAAAAAACAQMFBP/EAB8RAAICAgMBAQEAAAAAAAAAAAECAAQDEQWh0XExUf/aAAwDAQACEQMRAD8A+fwV6XJS8zLRR6unuiUbV9zXiyKSokpFDeHRyfZzvZRDozYr8JYsYxkQjR++TLA0WpSpWD2sn2eFTpT6sn2AsoYNwlhTokd+SADQKmyjduHJ9naGjSjV3o5Psg2kEZOCst+Ed+TMg0cVLkk/RyfZNqktoy/FxQbd17+W/gdM6udCUWeKzV8ZyORofzfk60ue0JaWig1I9sTjb/Tf8RQhrMqvfxfRmQK9ZGOzHr8zYwIMaAaH32aLVqsrG/VxfR4VRlPtxfRAACsgjNzdhjsgd+y+qlKqK/Li+jt+ZlbW5sX0ZoEGqhkrzllfwDv2aCKpyjfq4von1OZ0ZhaXFHu23v4a+CeB0wKp2JRY5TNnxnG4Gj99gAF0zYAAQgABCAAEJ//Z" -// )); -// if (!(Stinares-expected_result<80)) -// fail("->match(float f, object needle) differ too much"); - -// Stinares=Stina->match(0.00002, Stinamini,Image.Image(63,33)->polyfill(({0,0,60,0,60,30})), 10); -// expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAUGAwII/8QAJhAAAgAFBAEEAwAAAAAAAAAAAAECBAURogMSE9EhM0NRUxUxQf/EABkBAAIDAQAAAAAAAAAAAAAAAAACAQMFBP/EAB8RAAICAgMBAQEAAAAAAAAAAAECAAQDEQWh0XExUf/aAAwDAQACEQMRAD8A+fwV6XJS8zLRR6unuiUbV9zXiyKSokpFDeHRyfZzvZRDozYr8JYsYxkQjR++TLA0WpSpWD2sn2eFTpT6sn2AsoYNwlhTokd+SADQKmyjduHJ9naGjSjV3o5Psg2kEZOCst+Ed+TMg0cVLkk/RyfZNqktoy/FxQbd17+W/gdM6udCUWeKzV8ZyORofzfk60ue0JaWig1I9sTjb/Tf8RQhrMqvfxfRmQK9ZGOzHr8zYwIMaAaH32aLVqsrG/VxfR4VRlPtxfRAACsgjNzdhjsgd+y+qlKqK/Li+jt+ZlbW5sX0ZoEGqhkrzllfwDv2aCKpyjfq4von1OZ0ZhaXFHu23v4a+CeB0wKp2JRY5TNnxnG4Gj99gAF0zYAAQgABCAAEJ//Z" - -// )); -// if (!(Stinares-expected_result<80)) -// fail("->match(float f, object needle, object haystack_avoid, int foo) differ too much"); - -// Stinares=Stina->match_phase(0.00002, Stinamini,Image.Image(63,33)->polyfill(({0,0,60,0,60,30})), 10); -// expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGgABAQEBAAMAAAAAAAAAAAAAAAYFAgEDCP/EACUQAAEDAgUFAQEAAAAAAAAAAAABAgQFogMREiHRExVDUVMxM//EABkBAAIDAQAAAAAAAAAAAAAAAAACAQMEBf/EACQRAAEDAgYDAQEAAAAAAAAAAAEAAgQDEQUGFFFx0RIxkWEh/9oADAMBAAIRAxEAPwD5/Bs0iDGkxXPxsPU5HqmepU2yT0aSUSE5M24FzuTM+UxhsV2Y+ByZFMVGEWPPSlAVC0eE39wL3cnPaYXwvdyRq2bFWHL8oe3N+npTIKdKRCXwXu5OuzQvje7kNWz9UjL0o+i36elLAp1pMFPBe7ky6vEwIvR6LNOrVnuq+vY7JDXu8Qs0nB68akaryLDa+9tl7aTOjxYrmYuJpcr1XLSq7ZIaDazDb57XcEuCHxmOJJTx8bkUKYpsAsOe1TurEJfNa7g8d2hfax3BMgXSM3KtOYJR/vi34e1TJV4SL/a1eDt1Zhqm2PavBLANIz9QMwygLAN+HtUvdYX3tdwZtXl4Ero9F+rTqz2VPXszAOyO1jvILPJxevIpGk8Cx553QAF65SAAEIAAQgABC//Z" -// )); -// if (!(Stinares-expected_result<80)) -// fail("->match_phase(float f, object needle, object haystack_avoid, int foo) differ too much"); - -// Stinares=Stina->match_phase(0.00002, Stinamini); -// expected_result=Image.JPEG.decode(MIME.decode_base64( -// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAhAD8DASIAAhEBAxEB/8QAGgABAQEBAAMAAAAAAAAAAAAAAAYFAgEDCP/EACUQAAEDAgUFAQEAAAAAAAAAAAABAgQFogMREiHRExVDUVMxM//EABkBAAIDAQAAAAAAAAAAAAAAAAACAQMEBf/EACQRAAEDAgYDAQEAAAAAAAAAAAEAAgQDEQUGFFFx0RIxkWEh/9oADAMBAAIRAxEAPwD5/Bs0iDGkxXPxsPU5HqmepU2yT0aSUSE5M24FzuTM+UxhsV2Y+ByZFMVGEWPPSlAVC0eE39wL3cnPaYXwvdyRq2bFWHL8oe3N+npTIKdKRCXwXu5OuzQvje7kNWz9UjL0o+i36elLAp1pMFPBe7ky6vEwIvR6LNOrVnuq+vY7JDXu8Qs0nB68akaryLDa+9tl7aTOjxYrmYuJpcr1XLSq7ZIaDazDb57XcEuCHxmOJJTx8bkUKYpsAsOe1TurEJfNa7g8d2hfax3BMgXSM3KtOYJR/vi34e1TJV4SL/a1eDt1Zhqm2PavBLANIz9QMwygLAN+HtUvdYX3tdwZtXl4Ero9F+rTqz2VPXszAOyO1jvILPJxevIpGk8Cx553QAF65SAAEIAAQgABC//Z" -// )); - -// if (!(Stinares-expected_result<80)) -// fail("->match_phase(float f, object needle) differ too much"); - -// #endif - -// /* -// This is used to create more tests. Please don't remMIME.encode_base64ove! - -// MIME.encode_base64(Image.JPEG.encode(Stinares)); -// */ -ok();