]> granicus.if.org Git - imagemagick/blob - Magick++/tests/attributes.cpp
(no commit message)
[imagemagick] / Magick++ / tests / attributes.cpp
1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 //
5 // Tests for setting/getting Magick::Image attributes
6 //
7
8 #include <Magick++.h>
9 #include <string>
10 #include <iostream>
11
12 using namespace std;
13
14 using namespace Magick;
15
16 int main( int /*argc*/, char ** argv)
17 {
18
19   // Initialize ImageMagick install location for Windows
20   InitializeMagick(*argv);
21
22   volatile int failures=0;
23
24   try {
25
26     size_t columns = 640;
27     size_t rows = 480;
28     Geometry geometry(columns,rows);
29     Color canvasColor( "red" );
30     Image image( geometry, canvasColor);
31
32     //
33     // antiAlias
34     //
35
36     // Test default value
37     if ( image.antiAlias() != true )
38       {
39         ++failures;
40         cout << "Line: " << __LINE__ << ", antiAlias default not true" << endl;
41       }
42
43     // Test setting false
44     image.antiAlias( false );
45     if ( image.antiAlias() != false )
46       {
47         ++failures;
48         cout << "Line: " << __LINE__ << ", antiAlias not false" << endl;
49       }
50
51     // Test setting true
52     image.antiAlias( true );
53     if ( image.antiAlias() != true )
54       {
55         ++failures;
56         cout << "Line: " << __LINE__ << ", antiAlias not true" << endl;
57       }
58
59     //
60     // adjoin
61     //
62
63     // Test default value
64     if ( image.adjoin() != true )
65       {
66         ++failures;
67         cout << "Line: " << __LINE__
68              << ", adjoin default not 'true' as expected" << endl;
69       }
70
71     // Test setting false
72     image.adjoin( false );
73     if ( image.adjoin() != false )
74       {
75         ++failures;
76         cout << "Line: " << __LINE__ << ", adjoin failed set to 'false'" << endl;
77       }
78
79     // Test setting true
80     image.adjoin( true );
81     if ( image.adjoin() != true )
82       {
83         ++failures;
84         cout << "Line: " << __LINE__ << ", adjoin failed set to 'true'" << endl;
85       }
86
87     //
88     // animationDelay
89     //
90
91     // Test default value
92     if ( image.animationDelay() != 0 )
93       {
94         ++failures;
95         cout << "Line: " << __LINE__ << ", animationDelay default ("
96              << image.animationDelay()
97              << ") not 0 as expected" << endl;
98       }
99
100     // Test setting to 0
101     image.animationDelay( 0 );
102     if ( image.animationDelay() != 0 )
103       {
104         ++failures;
105         cout << "Line: " << __LINE__
106              << ", failed to set animationDelay to 0" << endl;
107       }
108
109     // Test setting to 100
110     image.animationDelay( 100 );
111     if ( image.animationDelay() != 100 )
112       {
113         ++failures;
114         cout << "Line: " << __LINE__
115              << ", failed to set animationDelay to 100" << endl;
116       }
117     image.animationDelay(0);
118
119     //
120     // animationIterations
121     //
122
123     // Test default value
124     if ( image.animationIterations() != 0 )
125       {
126         ++failures;
127         cout << "Line: " << __LINE__
128              << ", animationIterations default ("
129              << image.animationIterations()
130              << ") not 0 as expected" << endl;
131       }
132
133     // Test setting to 0
134     image.animationIterations( 0 );
135     if ( image.animationIterations() != 0 )
136       {
137         ++failures;
138         cout << "Line: " << __LINE__
139              << ", failed to set animationIterations to 0" << endl;
140       }
141
142     // Test setting to 100
143     image.animationIterations( 100 );
144     if ( image.animationIterations() != 100 )
145       {
146         ++failures;
147         cout << "Line: " << __LINE__
148              << ", failed to set animationIterations to 100" << endl;
149       }
150     image.animationIterations( 0 );
151
152     //
153     // backgroundColor
154     //
155
156     // Test default value.
157     if ( image.backgroundColor() != ColorRGB("white") )
158       {
159         ++failures;
160         cout << "Line: " << __LINE__ << ", backgroundColor default ("
161              << string(image.backgroundColor())
162              << ") is incorrect" << endl;
163       }
164
165     // Test setting to blue
166     image.backgroundColor("blue");
167     if ( !image.backgroundColor().isValid() )
168       {
169         ++failures;
170         cout << "Line: " << __LINE__ << ", backgroundColor ("
171              << string(image.backgroundColor())
172              << ") failed set to 'blue'" << endl;
173       }
174     else
175       if ( string(image.backgroundColor()) != "#0000FF" &&
176            string(image.backgroundColor()) != "#00000000FFFF" &&
177            string(image.backgroundColor()) != "#0000000000000000FFFFFFFF" )
178         {
179           ++failures;
180           cout << "Line: " << __LINE__ << ", backgroundColor ("
181                <<  string(image.backgroundColor()) << ") is incorrect"
182                << endl;
183         }
184
185     // Test setting using hex color
186     image.backgroundColor("#00AAFF");
187     if ( !image.backgroundColor().isValid() )
188       {
189         ++failures;
190         cout << "Line: " << __LINE__ << ", backgroundColor ("
191              << string(image.backgroundColor())
192              << ") is incorrectly invalid" << endl;
193       }
194     else
195       if ( string(image.backgroundColor()) != "#00AAFF" && 
196            string(image.backgroundColor()) != "#0000AAAAFFFF" && 
197            string(image.backgroundColor()) != "#00000000AAAAAAAAFFFFFFFF" )
198         {
199           ++failures;
200           cout << "Line: " << __LINE__
201                << ", backgroundColor ("
202                << string(image.backgroundColor())
203                << ") is incorrect"
204                << endl;
205         }
206
207     //
208     // backgroundTexture
209     //
210
211     // Test default value
212     if ( image.backgroundTexture() != "" )
213       {
214         ++failures;
215         cout << "Line: " << __LINE__ << ", backgroundTexture default ("
216              << image.backgroundTexture()
217              << ") is incorrect" << endl;
218       }
219
220     // Test setting/getting value
221     image.backgroundTexture("afile.jpg");
222     if ( image.backgroundTexture() != "afile.jpg" )
223       {
224         ++failures;
225         cout << "Line: " << __LINE__ << ", backgroundTexture ("
226              << image.backgroundTexture()
227              << ") is incorrect" << endl;
228       }
229
230     // Test setting back to default
231     image.backgroundTexture("");
232     if ( image.backgroundTexture() != "" )
233       {
234         ++failures;
235         cout << "Line: " << __LINE__
236              << ", backgroundTexture ("
237              << image.backgroundTexture()
238              << ") failed to set to \"\"" << endl;
239       }
240
241     //
242     // baseColumns
243     //
244     if ( image.baseColumns() != columns )
245       {
246         ++failures;
247         cout << "Line: " << __LINE__
248              << ", baseColumns ("
249              << image.baseColumns()
250              << ") is not equal to "
251              << columns
252              << " as expected"
253              << endl;
254       }
255
256
257     //
258     // baseFilename
259     //
260     // Base filename is color for xc images
261     if ( image.baseFilename() != "xc:#FF0000" &&
262          image.baseFilename() != "xc:#FFFF00000000" &&
263          image.baseFilename() != "xc:#FFFFFFFF0000000000000000")
264       {
265         ++failures;
266         cout << "Line: " << __LINE__
267              << ", baseFilename ("
268              << image.baseFilename()
269              << ") is incorrect"
270              << endl;
271       }
272
273     //
274     // baseRows
275     //
276     if ( image.baseRows() != rows )
277       {
278         ++failures;
279         cout << "Line: " << __LINE__
280              << ", baseRows ("
281              << image.baseRows()
282              << ") != rows ("
283              << rows
284              << ")"
285              << endl;
286       }
287
288     //
289     // borderColor
290     //
291     if ( image.borderColor() != ColorRGB("#dfdfdf") )
292       {
293         ++failures;
294         cout << "Line: " << __LINE__
295              << ",  borderColor default ("
296              << string(image.borderColor())
297              << ") is incorrect" << endl;
298       }
299
300     image.borderColor("#FF0000");
301     if ( image.borderColor() != Color("#FF0000") )
302       {
303         ++failures;
304         cout << "Line: " << __LINE__
305              << ", failed to set borderColor ("
306              << string(image.borderColor())
307              << ")" << endl;
308       }
309
310     image.borderColor("black");
311     if ( image.borderColor() != Color("#000000") )
312       {
313         ++failures;
314         cout << "Line: " << __LINE__
315              << ", failed to set borderColor ("
316              << string(image.borderColor())
317              << ")"
318              << endl;
319       }
320     
321     //
322     // boxColor
323     //
324     image.boxColor("#FF0000");
325     if ( image.boxColor() != Color("#FF0000") )
326       {
327         ++failures;
328         cout << "Line: " << __LINE__
329              << ", failed to set boxColor ("
330              << string(image.boxColor())
331              << ")"
332              << endl;
333       }
334
335     image.boxColor("black");
336     if ( image.boxColor() != Color("#000000") )
337       {
338         ++failures;
339         cout << "Line: " << __LINE__
340              << ", failed to set boxColor ("
341              << string(image.boxColor())
342              << ") to #000000"
343              << endl;
344       }
345
346     //
347     // chromaBluePrimary
348     //
349     {
350       // Test default setting
351       double x, y;
352       image.chromaBluePrimary( &x, &y );
353       if ( x != 0.1500 || y != 0.0600 )
354         {
355           ++failures;
356           cout << "Line: " << __LINE__
357                << ",  chromaBluePrimary x/y defaults are non-zero"
358                << endl;
359         }
360
361       // Test set/get
362       image.chromaBluePrimary( 50, 100 );
363       image.chromaBluePrimary( &x, &y );
364       if ( x != 50 || y != 100 )
365         {
366           ++failures;
367           cout << "Line: " << __LINE__
368                << ",  chromaBluePrimary x/y failed set/get" << endl;
369         }
370     }
371
372     //
373     // chromaGreenPrimary
374     //
375     {
376       // Test default setting
377       double x, y;
378       image.chromaGreenPrimary( &x, &y );
379       if ( x != 0.3000 || y != 0.6000 )
380         {
381           ++failures;
382           cout << "Line: " << __LINE__
383                << ",  chromaGreenPrimary x/y defaults are non-zero" << endl;
384         }
385
386       // Test set/get
387       image.chromaGreenPrimary( 50, 100 );
388       image.chromaGreenPrimary( &x, &y );
389       if ( x != 50 || y != 100 )
390         {
391           ++failures;
392           cout << "Line: " << __LINE__
393                << ",  chromaGreenPrimary x/y failed set/get" << endl;
394         }
395     }
396
397     //
398     // chromaRedPrimary
399     //
400     {
401       // Test default setting
402       double x, y;
403       image.chromaRedPrimary( &x, &y );
404       if ( x != 0.6400 || y != 0.3300 )
405         {
406           ++failures;
407           cout << "Line: " << __LINE__
408                << ",  chromaRedPrimary x/y defaults are non-zero" << endl;
409         }
410
411       // Test set/get
412       image.chromaRedPrimary( 50, 100 );
413       image.chromaRedPrimary( &x, &y );
414       if ( x != 50 || y != 100 )
415         {
416           ++failures;
417           cout << "Line: " << __LINE__
418                << ",  chromaRedPrimary x/y failed set/get" << endl;
419         }
420     }
421
422     //
423     // chromaWhitePoint
424     //
425     {
426       // Test default setting
427       double x, y;
428       image.chromaWhitePoint( &x, &y );
429       if ( x != 0.3127 || y != 0.3290 )
430         {
431           ++failures;
432           cout << "Line: " << __LINE__
433                << ",  chromaWhitePoint x/y defaults are non-zero" << endl;
434         }
435
436       // Test set/get
437       image.chromaWhitePoint( 50, 100 );
438       image.chromaWhitePoint( &x, &y );
439       if ( x != 50 || y != 100 )
440         {
441           ++failures;
442           cout << "Line: " << __LINE__
443                << ",  chromaWhitePoint x/y failed set/get" << endl;
444         }
445     }
446
447     //
448     // classType
449     //
450     if ( image.classType() != DirectClass )
451       {
452         ++failures;
453         cout << "Line: " << __LINE__ << ", classType is not DirectClass" << endl;
454       }
455
456     //
457     // colorFuzz
458     //
459
460     // Test default
461     if ( image.colorFuzz() != 0 )
462       {
463         ++failures;
464         cout << "Line: " << __LINE__ << ",  colorFuzz default is non-zero" << endl;
465       }
466
467     // Test set/get
468     image.colorFuzz( 2 );
469     if ( image.colorFuzz() != 2 )
470       {
471         ++failures;
472         cout << "Line: " << __LINE__ << ",  colorFuzz failed to set/get" << endl;
473       }
474     image.colorFuzz( 0 );
475
476     //
477     // columns
478     //
479     if ( image.columns() != columns )
480       {
481         ++failures;
482         cout << "Line: " << __LINE__
483              << ", columns is not equal to canvas image columns" << endl;
484       }
485
486     //
487     // comment
488     //
489     // Test default
490     if ( image.comment().length() != 0 )
491       {
492         ++failures;
493         cout << "Line: " << __LINE__
494              << ", comment default non-zero length" << endl;
495       }
496
497     // Test set/get
498     {
499       std::string comment("This is a comment.");
500       image.comment( comment );
501       if ( image.comment() != comment )
502         {
503           ++failures;
504           cout << "Line: " << __LINE__ << ", comment set/get failed" << endl;
505         }
506     }
507
508     // Test resetting comment
509     image.comment( string() );
510     if ( image.comment().length() != 0 )
511       {
512         ++failures;
513         cout << "Line: " << __LINE__ << ", comment failed to reset" << endl;
514       }
515
516     //
517     // compressType
518     //
519     // Test default
520     if ( image.compressType() != UndefinedCompression )
521       {
522         ++failures;
523         cout << "Line: " << __LINE__
524              << ", compressType default is incorrect" << endl;
525       }
526
527     // Test set/get
528     image.compressType(RLECompression);
529     if ( image.compressType() != RLECompression )
530       {
531         ++failures;
532         cout << "Line: " << __LINE__ << ", compressType set/get failed" << endl;
533       }
534     image.compressType(UndefinedCompression);
535
536     //
537     // density
538     //
539     {
540       // Test defaults
541       if ( image.density() != Geometry(72,72) )
542         {
543           ++failures;
544           cout << "Line: " << __LINE__
545                << ", density default is not 72x72 as expected" << endl;
546         }
547       
548       // Test set/get
549       Geometry density(150,75);
550       image.density(density);
551       if ( image.density() != density )
552         {
553           ++failures;
554           cout << "Line: " << __LINE__ << ", density set/get failed" << endl;
555         }
556
557
558       if ( image.xResolution() != 150 ||
559            image.yResolution() != 75 )
560         {
561           ++failures;
562           cout << "Line: " << __LINE__ << ", density set/get failed" << endl;
563         }
564
565       image.density("72x72");
566
567     }
568
569     //
570     // Format specific defines
571     //
572     if (image.defineSet("foo","bar"))
573       {
574         ++failures;
575         cout << "Line: " << __LINE__
576              << ", define for foo:bar incorrectly reports set."
577              << endl;
578       }
579
580     image.defineSet("foo","bar",true);
581     if (!image.defineSet("foo","bar"))
582       {
583         ++failures;
584         cout << "Line: " << __LINE__
585              << ", define for foo:bar incorrectly reports not set."
586              << endl;
587       }
588
589     image.defineSet("foo","bar",false);
590     if (image.defineSet("foo","bar"))
591       {
592         ++failures;
593         cout << "Line: " << __LINE__
594              << ", define for foo:bar incorrectly reports set."
595              << endl;
596       }
597
598     image.defineValue("foo","bar","value");
599     std::string value = image.defineValue("foo","bar");
600     if (image.defineValue("foo","bar") != "value")
601       {
602         ++failures;
603         cout << "Line: " << __LINE__
604              << ", define for foo:bar incorrectly reports value \""
605              << value << "\""
606              << endl;
607       }
608
609     image.defineSet("foo","bar",false);
610     if (image.defineSet("foo","bar"))
611       {
612         ++failures;
613         cout << "Line: " << __LINE__
614              << ", define for foo:bar incorrectly reports set."
615              << endl;
616       }
617
618     //
619     // depth
620     //
621     if ( image.depth() != MAGICKCORE_QUANTUM_DEPTH )
622       {
623         ++failures;
624         cout << "Line: " << __LINE__
625              << ", depth ("
626              << image.depth()
627              << ") is not equal to " << MAGICKCORE_QUANTUM_DEPTH << endl;
628       }
629
630     //
631     // Directory
632     //
633     {
634       // Since this is not a montage image, simply verify error report
635       bool caughtException = false;
636       cout << "Testing throwing and catching exceptions. A program crash or a message" << endl
637            << "that the exception was not caught indicates a test failure.  A properly" << endl
638            << "formatted exception message indicates success:" << endl;
639       try
640         {
641           //image.directory();
642           Magick::Image bad_image("foo");
643         }
644       catch ( Exception &exception_)
645         {
646           cout << "Caught exception, good!:" << endl
647                << "  \"" << exception_.what() << "\"" << endl;
648           caughtException = true;
649         }
650       if ( caughtException != true )
651         {
652           ++failures;
653           cout << "failed to catch exception!" << endl;
654         }
655     }
656
657     //
658     // fileName
659     //
660     // Test default
661     if ( image.fileName() != string("xc:") + string(canvasColor) )
662       {
663         ++failures;
664         cout << "Line: "
665              << __LINE__
666              << ", fileName ("
667              << image.fileName()
668              << ") is not canvas color ("
669              << string(canvasColor)
670              <<") as expected" << endl;
671       }
672
673     // Set/get value
674     image.fileName("filename.jpg");
675     if ( image.fileName() != "filename.jpg" )
676       {
677         ++failures;
678         cout << "Line: "
679              << __LINE__
680              << ", fileName ("
681              << image.fileName()
682              << ") failed to set/get" << endl;
683       }
684     image.fileName(canvasColor);
685
686     //
687     // fileSize
688     //
689     // Test default
690     if ( image.fileSize() != 0 )
691       {
692         ++failures;
693         cout << "Line: " << __LINE__ << ", fileSize ("
694              << static_cast<ssize_t>(image.fileSize())
695              << ") is not zero as expected" << endl;
696       }
697
698     //
699     // filterType
700     //
701     // Test default
702     if ( image.filterType() != UndefinedFilter )
703       {
704         ++failures;
705         cout << "Line: " << __LINE__
706              << ", filterType default ("
707              << (int)image.filterType()
708              << ") is incorrect" << endl;
709       }
710
711     // Test set/get
712     image.filterType( TriangleFilter );
713     if ( image.filterType() != TriangleFilter )
714       {
715         ++failures;
716         cout << "Line: " << __LINE__ << ", filterType set/get failed"
717              << endl;
718       }
719
720     //
721     // font
722     //
723
724     // Test set/get
725     image.font("helvetica");
726     if ( image.font() != "helvetica" )
727       {
728         ++failures;
729         cout << "Line: " << __LINE__ << ", font set/get failed" << endl;
730       }
731     // Test set to null font
732     image.font( string() );
733     if ( image.font().length() != 0 )
734       {
735         ++failures;
736         cout << "Line: " << __LINE__ << ", font failed to unset" << endl;
737       }
738
739     //
740     // fontPointsize
741     //
742     // Test default
743     if ( image.fontPointsize() != 0 )
744       {
745         ++failures;
746         cout << "Line: " << __LINE__
747              << ", fontPointsize ("
748              << image.fontPointsize()
749              << ") is not default of 0 as expected"
750              << endl;
751       }
752
753     // Test set/get
754     image.fontPointsize(10);
755     if ( image.fontPointsize() != 10 )
756       {
757         ++failures;
758         cout << "Line: " << __LINE__
759              << ", fontPointsize set/get failed" << endl;
760       }
761     image.fontPointsize(12);
762
763     //
764     // format
765     //
766     if ( image.format() != "Constant image uniform color" )
767       {
768         ++failures;
769         cout << "Line: " << __LINE__
770              << ", format (" << image.format() << ") is not expected value" << endl;
771       }
772
773     //
774     // gamma
775     //
776     if ( image.gamma() != 0.45455 )
777       {
778         ++failures;
779         cout << "Line: " << __LINE__
780              << ", gamma correction is not zero as expected" << endl;
781       }
782
783     //
784     // geometry
785     //
786     {
787       bool caughtException = false;
788       try
789         {
790           image.geometry();
791         }
792       catch ( Exception )
793         {
794           caughtException = true;
795         }
796       if ( caughtException != true )
797         {
798           ++failures;
799           cout << "Line: " << __LINE__
800                << ", geometry failed to report missing image geometry";
801         }
802     }
803
804     //
805     // gifDisposeMethod
806     //
807     // Test default
808     if ( image.gifDisposeMethod() != 0 )
809       {
810         ++failures;
811         cout << "Line: " << __LINE__
812              << ", gifDisposeMethod default is not zero as expected" << endl;
813       }
814
815     // Test set/get
816     image.gifDisposeMethod(4);
817     if ( image.gifDisposeMethod() != 4 )
818       {
819         ++failures;
820         cout << "Line: " << __LINE__
821              << ", gifDisposeMethod set/get failed" << endl;
822       }
823     image.gifDisposeMethod(0);
824
825     //
826     // interlaceType
827     //
828     // Test default
829     if ( image.interlaceType() != NoInterlace )
830       {
831         ++failures;
832         cout << "Line: " << __LINE__
833              << ", interlaceType default is not NoInterlace as expected" << endl;
834       }
835
836     // Test set/get
837     image.interlaceType( PlaneInterlace );
838     if ( image.interlaceType() != PlaneInterlace )
839       {
840         ++failures;
841         cout << "Line: " << __LINE__ << ", interlaceType set/get failed" << endl;
842       }
843     image.interlaceType(NoInterlace);
844
845     //
846     // label
847     //
848     // Test default
849     if ( image.label().length() != 0 )
850       {
851         ++failures;
852         cout << "Line: " << __LINE__
853              << ", label default is not empty string as expected" << endl;
854       }
855
856     // Test set/get
857     image.label("How now brown cow?");
858     if ( image.label() != "How now brown cow?" )
859       {
860         ++failures;
861         cout << "Line: " << __LINE__ << ", label set/get failed" << endl;
862       }
863     // Test set to default
864     image.label( string() );
865     if ( image.label().length() != 0 )
866       {
867         ++failures;
868         cout << "Line: " << __LINE__ << ", label failed to unset" << endl;
869       }
870
871     //
872     // lineWidth
873     //
874     // Test default
875     if ( image.lineWidth() != 1 )
876       {
877         ++failures;
878         cout << "Line: " << __LINE__
879              << ", lineWidth default is not 1 as expected" << endl;
880       }
881
882     // Test set/get
883     image.lineWidth(2);
884     if ( image.lineWidth() != 2 )
885       {
886         ++failures;
887         cout << "Line: " << __LINE__ << ", lineWidth set/get failed" << endl;
888       }
889     image.lineWidth(1);
890
891     //
892     // magick
893     //
894     // Test canvas default
895     if ( image.magick() != "XC" )
896       {
897         ++failures;
898         cout << "Line: " << __LINE__
899              << ", magick canvas default is not XC as expected" << endl;
900       }
901
902     // Test set/get
903     image.magick("GIF");
904     if ( image.magick() != "GIF" )
905       {
906         ++failures;
907         cout << "Line: " << __LINE__ << ", magick set/get failed" << endl;
908       }
909
910     image.magick("XC");
911
912     //
913     // matte
914     //
915     // Test default
916     if ( image.matte() != false )
917       {
918         ++failures;
919         cout << "Line: " << __LINE__
920              << ", matte default is not false as expected" << endl;
921       }
922
923     // Test set/get
924     image.matte(true);
925     if ( image.matte() != true )
926       {
927         ++failures;
928         cout << "Line: " << __LINE__ << ", matte set/get failed" << endl;
929       }
930     image.matte(false);
931
932     //
933     // matteColor
934     //
935     // Test default
936     if ( image.matteColor() != Color("#BDBDBD") )
937       {
938         ++failures;
939         cout << "Line: " << __LINE__
940              << ", matteColor default is not #BDBDBD as expected" << endl;
941       }
942
943     // Test set/get
944     image.matteColor(ColorRGB(0.5,0.5,1));
945     if ( image.matteColor() != ColorRGB(0.5,0.5,1) )
946       {
947         ++failures;
948         cout << "Line: " << __LINE__ << ", matteColor set/get failed" << endl;
949       }
950
951     // Test unset
952     image.matteColor( Color() );
953
954     image.matteColor("#BDBDBD");
955
956     //
957     // meanErrorPerPixel
958     //
959     if ( image.meanErrorPerPixel() != 0 )
960       {
961         ++failures;
962         cout << "Line: " << __LINE__
963              << ", meanErrorPerPixel is not zero as expected" << endl;
964       }
965
966     //
967     // montageGeometry
968     //
969     {
970       bool caughtException = false;
971       try
972         {
973           image.montageGeometry();
974         }
975       catch ( Exception )
976         {
977           caughtException = true;
978         }
979       if ( caughtException != true )
980         {
981           ++failures;
982           cout << "Line: " << __LINE__
983                << ", montageGeometry failed to report missing montage geometry";
984         }
985     }
986
987     //
988     // monochrome
989     //
990     // Test default
991     if ( image.monochrome() != false )
992       {
993         ++failures;
994         cout << "Line: " << __LINE__
995              << ", monochrome is not false as expected" << endl;
996       }
997
998     // Test set/get
999     image.monochrome(true);
1000     if ( image.monochrome() != true )
1001       {
1002         ++failures;
1003         cout << "Line: " << __LINE__ << ", monochrome get/set failed" << endl;
1004       }
1005     image.monochrome(false);
1006
1007     //
1008     // normalizedMaxError
1009     //
1010     if ( image.normalizedMaxError() != 0 )
1011       {
1012         ++failures;
1013         cout << "Line: " << __LINE__
1014              << ",normalizedMaxError is not zero as expected" << endl;
1015       }
1016
1017     //
1018     // normalizedMeanError
1019     //
1020     if ( image.normalizedMeanError() != 0 )
1021       {
1022         ++failures;
1023         cout << "Line: " << __LINE__
1024              << ", normalizedMeanError is not zero as expected" << endl;
1025       }
1026
1027     //
1028     // penColor
1029     //
1030
1031     image.penColor(ColorRGB(0.5,0.5,1));
1032     if ( image.penColor() != ColorRGB(0.5,0.5,1) )
1033       {
1034         ++failures;
1035         cout << "Line: " << __LINE__ << ", penColor ("
1036              << string(image.penColor())
1037              << ") set/get failed" << endl;
1038       }
1039
1040     //
1041     // strokeColor
1042     //
1043
1044     image.strokeColor(ColorRGB(0.5,0.5,1));
1045     if ( image.strokeColor() != ColorRGB(0.5,0.5,1) )
1046       {
1047         ++failures;
1048         cout << "Line: " << __LINE__ << ", strokeColor ("
1049              << string(image.strokeColor())
1050              << ") set/get failed" << endl;
1051       }
1052
1053
1054     //
1055     // fillColor
1056     //
1057
1058     image.fillColor(ColorRGB(0.5,0.5,1));
1059     if ( image.fillColor() != ColorRGB(0.5,0.5,1) )
1060       {
1061         ++failures;
1062         cout << "Line: " << __LINE__ << ", fillColor ("
1063              << string(image.fillColor())
1064              << ") set/get failed" << endl;
1065       }
1066
1067     //
1068     // pixelColor
1069     //
1070     // Test default
1071     if ( image.pixelColor(40,60) != canvasColor )
1072       {
1073         ++failures;
1074         cout << "Line: " << __LINE__ << ", pixelColor default ("
1075              << string(image.pixelColor(40,60))
1076              << ") is not canvas color ("
1077              << string(canvasColor)
1078              << ") as expected" << endl;
1079       }
1080
1081     // Test set/get
1082     image.pixelColor(40,60, ColorRGB(0.5,1,1));
1083     if ( image.pixelColor(40,60) != ColorRGB(0.5,1,1) )
1084       {
1085         ++failures;
1086         cout << "Line: " << __LINE__ << ", pixelColor set/get failed" << endl;
1087       }
1088
1089     //
1090     // page
1091     //
1092     // Test default
1093     if ( image.page() != Geometry(640,480,0,0) )
1094       {
1095         ++failures;
1096         cout << "Line: " << __LINE__ << ", page default "
1097              << "(" << string(image.page()) << ")"
1098              << " is not 640x480 as expected" << endl;
1099       }
1100
1101     // Test set/get
1102     image.page("letter+43+43>");
1103     if ( image.page() != "612x792+43+43" )
1104       {
1105         ++failures;
1106         cout << "Line: " << __LINE__
1107              << ", page set/get failed (" << string(image.page()) << ")" << endl;
1108       }
1109
1110     //
1111     // quality
1112     //
1113     // Test default
1114     if ( image.quality() != 0 )
1115       {
1116         ++failures;
1117         cout << "Line: " << __LINE__
1118              << ", quality default is not 0 as expected" << endl;
1119       }
1120
1121     // Test set/get
1122     image.quality(65);
1123     if ( image.quality() != 65 )
1124       {
1125         ++failures;
1126         cout << "Line: " << __LINE__ << ", quality set/get failed" << endl;
1127       }
1128     image.quality(0);
1129
1130     //
1131     // quantizeColors
1132     //
1133     // Test default
1134     if ( image.quantizeColors() != 256 )
1135       {
1136         ++failures;
1137         cout << "Line: " << __LINE__
1138              << ", quantizeColors is not 256 as expected" << endl;
1139       }
1140
1141     // Test set/get
1142     image.quantizeColors(200);
1143     if ( image.quantizeColors() != 200 )
1144       {
1145         ++failures;
1146         cout << "Line: " << __LINE__ << ", quantizeColors set/get failed" << endl;
1147       }
1148     image.quantizeColors(0);
1149
1150     //
1151     // quantizeColorSpace
1152     //
1153     // Test default
1154     if ( image.quantizeColorSpace() != UndefinedColorspace )
1155       {
1156         ++failures;
1157         cout << "Line: " << __LINE__
1158              << ", quantizeColorSpace is not RGBColorspace as expected" << endl;
1159       }
1160
1161     // Test set/get
1162     image.quantizeColorSpace(YIQColorspace);
1163     if ( image.quantizeColorSpace() != YIQColorspace )
1164       {
1165         ++failures;
1166         cout << "Line: " << __LINE__
1167              << ", quantizeColorSpace set/get failed" << endl;
1168       }
1169     image.quantizeColorSpace(RGBColorspace);
1170
1171     //
1172     // quantizeDither
1173     //
1174     // Test default
1175     if ( image.quantizeDither() == false )
1176       {
1177         ++failures;
1178         cout << "Line: " << __LINE__
1179              << ", quantizeDither is not false as expected" << endl;
1180       }
1181
1182     // Test set/get
1183     image.quantizeDither(false);
1184     if ( image.quantizeDither() != false )
1185       {
1186         ++failures;
1187         cout << "Line: " << __LINE__
1188              << ", quantizeDither get/set failed" << endl;
1189       }
1190     image.quantizeDither(true);
1191
1192     //
1193     // quantizeTreeDepth
1194     //
1195     if ( image.quantizeTreeDepth() != 0 )
1196       {
1197         ++failures;
1198         cout << "Line: " << __LINE__ << ", quantizeTreeDepth default is "
1199              << image.quantizeTreeDepth()
1200              << " rather than zero as expected" << endl;
1201       }
1202
1203     image.quantizeTreeDepth(7);
1204     if ( image.quantizeTreeDepth() != 7 )
1205       {
1206         ++failures;
1207         cout << "Line: " << __LINE__
1208              << ", quantizeTreeDepth set/get failed" << endl;
1209       }
1210     image.quantizeTreeDepth(8);
1211
1212     //
1213     // renderingIntent
1214     //
1215     if ( image.renderingIntent() != PerceptualIntent )
1216       {
1217         ++failures;
1218         cout << "Line: " << __LINE__
1219              << ", renderingIntent default is not PerceptualIntent as expected"
1220              << endl;
1221       }
1222
1223     image.renderingIntent(PerceptualIntent);
1224     if ( image.renderingIntent() != PerceptualIntent )
1225       {
1226         ++failures;
1227         cout << "Line: " << __LINE__
1228              << ", renderingIntent set/get failed" << endl;
1229       }
1230     image.renderingIntent(UndefinedIntent);
1231
1232     //
1233     // resolutionUnits
1234     //
1235     if ( image.resolutionUnits() != UndefinedResolution )
1236       {
1237         ++failures;
1238         cout << "Line: " << __LINE__
1239              << ", resolutionUnits default is not UndefinedResolution as expected"
1240              << endl;
1241       }
1242
1243     image.resolutionUnits(PixelsPerCentimeterResolution);
1244     if ( image.resolutionUnits() != PixelsPerCentimeterResolution )
1245       {
1246         ++failures;
1247         cout << "Line: " << __LINE__
1248              << ", resolutionUnits set/get failed" << endl;
1249       }
1250     image.resolutionUnits(UndefinedResolution);
1251
1252     //
1253     // rows
1254     //
1255     if ( image.rows() != rows )
1256       {
1257         ++failures;
1258         cout << "Line: " << __LINE__
1259              << ", rows is canvas rows as expected" << endl;
1260       }
1261
1262     //
1263     // scene
1264     //
1265     if ( image.scene() != 0 )
1266       {
1267         ++failures;
1268         cout << "Line: " << __LINE__
1269              << ", scene default is not zero as expected" << endl;
1270       }
1271
1272     image.scene(5);
1273     if ( image.scene() != 5 )
1274       {
1275         ++failures;
1276         cout << "Line: " << __LINE__
1277              << ", scene set/get failed" << endl;
1278       }
1279     image.scene(0);
1280
1281     //
1282     // signature
1283     //
1284
1285     if ( image.signature() != "a81c2719f3a1fda387f86cc103340bb121f87c33f91ba130b774d8ad582b30ea")
1286       {
1287         ++failures;
1288         cout << "Line: " << __LINE__ << ", signature ("
1289              << image.signature()
1290              << ") is incorrect" << endl;
1291         image.display();
1292       }
1293
1294     //
1295     // size
1296     //
1297     if ( image.size() != geometry )
1298       {
1299         ++failures;
1300         cout << "Line: " << __LINE__ << ", size ("
1301              << string(image.size())
1302              << ") is not equal to geometry ("
1303              << string(geometry)
1304              << ")"
1305              << endl;
1306       }
1307
1308     image.size("800x600");
1309     if ( image.size() != Geometry("800x600") )
1310       {
1311         ++failures;
1312         cout << "Line: " << __LINE__ << ", size set/get failed" << endl;
1313       }
1314     image.size( geometry );
1315
1316     //
1317     // subImage
1318     //
1319     if ( image.subImage() != 0 )
1320       {
1321         ++failures;
1322         cout << "Line: " << __LINE__
1323              << ", subImage default is not zero as expected" << endl;
1324       }
1325
1326     image.subImage(5);
1327     if ( image.subImage() != 5 )
1328       {
1329         ++failures;
1330         cout << "Line: " << __LINE__
1331              << ", subImage set/get failed" << endl;
1332       }
1333     image.subImage(0);
1334
1335     //
1336     // subRange
1337     //
1338     if ( image.subRange() != 0 )
1339       {
1340         ++failures;
1341         cout << "Line: " << __LINE__
1342              << ", subRange default is not zero as expected" << endl;
1343       }
1344
1345     image.subRange(5);
1346     if ( image.subRange() != 5 )
1347       {
1348         ++failures;
1349         cout << "Line: " << __LINE__
1350              << ", subRange set/get failed" << endl;
1351       }
1352     image.subRange(0);
1353
1354     //
1355     // totalColors
1356     //
1357     if ( image.totalColors() != 2 )
1358       {
1359         ++failures;
1360         cout << "Line: " << __LINE__ << ", totalColors is " << image.totalColors()
1361              << " rather than 2 as expected" << endl;
1362       }
1363
1364     //
1365     // type
1366     //
1367     image.type(PaletteType);
1368     if ( image.type() != PaletteType )
1369       {
1370         ++failures;
1371         cout << "Line: " << __LINE__
1372              << ", type is not PaletteType as expected. Reported type "
1373              << (int) image.type() << endl;
1374
1375       }
1376
1377     //
1378     // verbose
1379     //
1380     if ( image.verbose() != false )
1381       {
1382         ++failures;
1383         cout << "Line: " << __LINE__
1384              << ", verbose is not false as expected" << endl;
1385       }
1386
1387     //
1388     // view
1389     //
1390     if ( image.view().length() != 0 )
1391       {
1392         ++failures;
1393         cout << "Line: " << __LINE__
1394              << ", view default is not empty string as expected" << endl;
1395       }
1396     
1397     image.view("How now brown cow?");
1398     if ( image.view() != "How now brown cow?" )
1399       {
1400         ++failures;
1401         cout << "Line: " << __LINE__
1402              << ", view set/get failed" << endl;
1403       }
1404
1405     image.view( string() );
1406     if ( image.view().length() != 0 )
1407       {
1408         ++failures;
1409         cout << "Line: " << __LINE__
1410              << ", view failed to unset" << endl;
1411       }
1412
1413     //
1414     // x11Display
1415     //
1416     if ( image.x11Display().length() != 0 )
1417       {
1418         ++failures;
1419         cout << "Line: " << __LINE__
1420              << ", x11Display default is not empty string as expected" << endl;
1421       }
1422     
1423     image.x11Display(":0.0");
1424     if ( image.x11Display() != ":0.0" )
1425       {
1426         ++failures;
1427         cout << "Line: " << __LINE__
1428              << ", x11Display set/get failed" << endl;
1429       }
1430
1431     image.x11Display( string() );
1432     if ( image.x11Display().length() != 0 )
1433       {
1434         ++failures;
1435         cout << "Line: " << __LINE__
1436              << ", x11Display failed to unset" << endl;
1437       }
1438
1439     //
1440     // xResolution
1441     //
1442     if ( image.xResolution() != 72 )
1443       {
1444         ++failures;
1445         cout << "Line: " << __LINE__
1446              << ", xResolution default (" << image.xResolution()
1447              << ") is not zero as expected" << endl;
1448       }
1449
1450     //
1451     // yResolution
1452     //
1453     if ( image.yResolution() != 72 )
1454       {
1455         ++failures;
1456         cout << "Line: " << __LINE__
1457              << ", yResolution default (" << image.yResolution()
1458              << ") is not zero as expected" << endl;
1459       }
1460   }
1461   catch( Exception &error_ )
1462     {
1463       cout << "Caught exception: " << error_.what() << endl;
1464       return 1;
1465     }
1466   catch( exception &error_ )
1467     {
1468       cout << "Caught exception: " << error_.what() << endl;
1469       return 1;
1470     }
1471   
1472   if ( failures )
1473     {
1474       cout << failures << " failures" << endl;
1475       return 1;
1476     }
1477
1478   return 0;
1479 }