validate.c revision 042ee78fa9004bf1ac6a95f09d9d1faca631dda1
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V V AAA L IIIII DDDD AAA TTTTT EEEEE % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V V A A L I D D A A T E % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V V AAAAA L I D D AAAAA T EEE % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V V A A L I D D A A T E % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V A A LLLLL IIIII DDDD A A T EEEEE % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ImageMagick Validation Suite % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% John Cristy % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% March 2001 % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 217e41fe84a841d7b9d7b36b245b65e9dcb3314943cristy% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% see the License for the specific language governing permissions and % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <stdio.h> 445e8e98117d8549131cd304db78537e04dde513f5cristy#include <stdlib.h> 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <string.h> 465e8e98117d8549131cd304db78537e04dde513f5cristy#include <ctype.h> 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <math.h> 483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include "wand/MagickWand.h" 49a0b81c3e9f1773555296b3147c9bb3edef8dcddbcristy#include "magick/string-private.h" 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include "validate.h" 513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e C o m p a r e C o m m a n d % 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateCompareCommand() validates the ImageMagick compare command line 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateCompareCommand method is: 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 68bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateCompareCommand(ImageInfo *image_info, 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 70bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 85bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateCompareCommand(ImageInfo *image_info, 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 87bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 99bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 103bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate compare command line program:\n"); 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; compare_options[i] != (char *) NULL; i++) 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 11175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) (test++), 1126aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy compare_options[i]); 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s %s %s", 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compare_options[i],reference_filename,reference_filename,output_filename); 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11866688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=CompareImageCommand(image_info,number_arguments,arguments, 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12966688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13575a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 13675a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 13775a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e C o m p o s i t e C o m m a n d % 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateCompositeCommand() validates the ImageMagick composite command line 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateCompositeCommand method is: 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 157bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateCompositeCommand(ImageInfo *image_info, 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 159bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 174bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateCompositeCommand(ImageInfo *image_info, 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 176bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 188bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 192bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate composite command line program:\n"); 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; composite_options[i] != (char *) NULL; i++) 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 20075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) (test++), 2016aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy composite_options[i]); 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s %s %s", 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_filename,composite_options[i],reference_filename, 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename); 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20866688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=CompositeImageCommand(image_info,number_arguments,arguments, 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21966688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22575a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 22675a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 22775a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e C o n v e r t C o m m a n d % 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateConvertCommand() validates the ImageMagick convert command line 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateConvertCommand method is: 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 247bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateConvertCommand(ImageInfo *image_info, 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 249bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 264bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateConvertCommand(ImageInfo *image_info, 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 266bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 278bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 282bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate convert command line program:\n"); 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; convert_options[i] != (char *) NULL; i++) 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 29075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) test++, 2916aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy convert_options[i]); 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s %s %s", 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_filename,convert_options[i],reference_filename,output_filename); 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29766688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=ConvertImageCommand(image_info,number_arguments,arguments, 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30866688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31475a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 31575a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 31675a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e I d e n t i f y C o m m a n d % 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateIdentifyCommand() validates the ImageMagick identify command line 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateIdentifyCommand method is: 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 336bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateIdentifyCommand(ImageInfo *image_info, 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 338bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 353bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateIdentifyCommand(ImageInfo *image_info, 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 355bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 367bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 371bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) output_filename; 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate identify command line program:\n"); 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; identify_options[i] != (char *) NULL; i++) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 38075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) test++, 3816aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy identify_options[i]); 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s", 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy identify_options[i],reference_filename); 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38766688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=IdentifyImageCommand(image_info,number_arguments,arguments, 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39866688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40475a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 40575a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 40675a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e I m a g e F o r m a t s I n M e m o r y % 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateImageFormatsInMemory() validates the ImageMagick image formats in 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% memory and returns the number of validation tests that passed and failed. 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateImageFormatsInMemory method is: 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 426bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateImageFormatsInMemory(ImageInfo *image_info, 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 428bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 443bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateImageFormatsInMemory(ImageInfo *image_info, 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 445bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size[MaxTextExtent]; 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickInfo 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *magick_info; 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distortion, 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz; 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *difference_image, 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reference_image, 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reconstruct_image; 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 465bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *blob; 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 475bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate image formats in memory:\n"); 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; reference_formats[i].magick != (char *) NULL; i++) 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_info=GetMagickInfo(reference_formats[i].magick,exception); 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((magick_info == (const MagickInfo *) NULL) || 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (magick_info->decoder == (DecodeImageHandler *) NULL) || 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (magick_info->encoder == (EncodeImageHandler *) NULL)) 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 4875f1c1fff2a55c4d8756556e78c1f307d352ed1b8cristy for (j=0; reference_types[j].type != UndefinedType; j++) 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate reference image. 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 49375a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s/%s/%s/%.20g-bits",(double) 494042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy (test++),reference_formats[i].magick,CommandOptionToMnemonic( 4957998e5fecd99cd9838e7a960168f48b92d38bbfccristy MagickCompressOptions,reference_formats[i].compression), 496042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy CommandOptionToMnemonic(MagickTypeOptions,reference_types[j].type), 49775a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) reference_types[j].depth); 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename,reference_filename, 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50366688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write reference image. 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) FormatMagickString(size,MaxTextExtent,"%.20gx%.20g", 51175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) reference_image->columns,(double) reference_image->rows); 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloneString(&image_info->size,size); 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->depth=reference_types[j].depth; 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(reference_image->filename,MaxTextExtent,"%s:%s", 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageType(reference_image,reference_types[j].type); 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52066688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageDepth(reference_image,reference_types[j].depth); 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52966688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5347998e5fecd99cd9838e7a960168f48b92d38bbfccristy reference_image->compression=reference_formats[i].compression; 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=WriteImage(image_info,reference_image); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54066688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read reference image. 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(image_info->filename,MaxTextExtent,"%s:%s", 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55266688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write reference image. 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(reference_image->filename,MaxTextExtent,"%s:%s", 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->magick,reference_formats[i].magick, 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->depth=reference_types[j].depth; 5647998e5fecd99cd9838e7a960168f48b92d38bbfccristy reference_image->compression=reference_formats[i].compression; 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=8192; 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blob=ImageToBlob(image_info,reference_image,&length,exception); 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (blob == (unsigned char *) NULL) 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56966688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read reconstruct image. 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(image_info->filename,MaxTextExtent,"%s:%s", 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=BlobToImage(image_info,blob,length,exception); 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blob=(unsigned char *) RelinquishMagickMemory(blob); 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reconstruct_image == (Image *) NULL) 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58366688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Compare reference to reconstruct image. 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz=0.0; 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_formats[i].fuzz != 0.0) 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz=reference_formats[i].fuzz; 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HDRI_SUPPORT) 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=0.003; 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image->colorspace != RGBColorspace) 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=0.3; 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=MagickEpsilon; 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=CompareImageChannels(reference_image,reconstruct_image, 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AllChannels,MeanSquaredErrorMetric,&distortion,exception); 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=DestroyImage(reconstruct_image); 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (difference_image == (Image *) NULL) 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60666688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=DestroyImage(difference_image); 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((distortion/QuantumRange) > fuzz) 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 613e7f5109f30fc7242d04a26174a9138483dda5b6acristy (void) fprintf(stdout,"... fail (with distortion %g).\n", 6148cd5b3193212b4aebce08c4e7afbb66b09778029cristy distortion/QuantumRange); 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 62275a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 62375a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e I m a g e F o r m a t s O n D i s k % 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateImageFormatsOnDisk() validates the ImageMagick image formats on disk 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% and returns the number of validation tests that passed and failed. 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateImageFormatsOnDisk method is: 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 643bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateImageFormatsOnDisk(ImageInfo *image_info, 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 645bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 660bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateImageFormatsOnDisk(ImageInfo *image_info, 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 662bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size[MaxTextExtent]; 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickInfo 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *magick_info; 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distortion, 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz; 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *difference_image, 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reference_image, 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reconstruct_image; 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 682bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 686bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate image formats on disk:\n"); 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; reference_formats[i].magick != (char *) NULL; i++) 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_info=GetMagickInfo(reference_formats[i].magick,exception); 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((magick_info == (const MagickInfo *) NULL) || 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (magick_info->decoder == (DecodeImageHandler *) NULL) || 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (magick_info->encoder == (EncodeImageHandler *) NULL)) 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 6985f1c1fff2a55c4d8756556e78c1f307d352ed1b8cristy for (j=0; reference_types[j].type != UndefinedType; j++) 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate reference image. 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 70475a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s/%s/%s/%.20g-bits",(double) 705042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy (test++),reference_formats[i].magick,CommandOptionToMnemonic( 7067998e5fecd99cd9838e7a960168f48b92d38bbfccristy MagickCompressOptions,reference_formats[i].compression), 707042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy CommandOptionToMnemonic(MagickTypeOptions,reference_types[j].type), 70875a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) reference_types[j].depth); 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename,reference_filename, 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71466688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write reference image. 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) FormatMagickString(size,MaxTextExtent,"%.20gx%.20g", 72275a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) reference_image->columns,(double) reference_image->rows); 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloneString(&image_info->size,size); 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->depth=reference_types[j].depth; 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(reference_image->filename,MaxTextExtent,"%s:%s", 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageType(reference_image,reference_types[j].type); 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73166688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageDepth(reference_image,reference_types[j].depth); 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74066688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7457998e5fecd99cd9838e7a960168f48b92d38bbfccristy reference_image->compression=reference_formats[i].compression; 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=WriteImage(image_info,reference_image); 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75166688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read reference image. 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(image_info->filename,MaxTextExtent,"%s:%s", 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 76366688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write reference image. 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(reference_image->filename,MaxTextExtent,"%s:%s", 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->depth=reference_types[j].depth; 7737998e5fecd99cd9838e7a960168f48b92d38bbfccristy reference_image->compression=reference_formats[i].compression; 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=WriteImage(image_info,reference_image); 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77866688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read reconstruct image. 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(image_info->filename,MaxTextExtent,"%s:%s", 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_formats[i].magick,output_filename); 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=ReadImage(image_info,exception); 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reconstruct_image == (Image *) NULL) 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79166688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Compare reference to reconstruct image. 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz=0.0; 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_formats[i].fuzz != 0.0) 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz=reference_formats[i].fuzz; 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HDRI_SUPPORT) 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=0.003; 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image->colorspace != RGBColorspace) 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=0.3; 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fuzz+=MagickEpsilon; 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=CompareImageChannels(reference_image,reconstruct_image, 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AllChannels,MeanSquaredErrorMetric,&distortion,exception); 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=DestroyImage(reconstruct_image); 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (difference_image == (Image *) NULL) 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81466688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=DestroyImage(difference_image); 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((distortion/QuantumRange) > fuzz) 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 821e7f5109f30fc7242d04a26174a9138483dda5b6acristy (void) fprintf(stdout,"... fail (with distortion %g).\n", 8228cd5b3193212b4aebce08c4e7afbb66b09778029cristy distortion/QuantumRange); 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82975a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 83075a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 83175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e I m p o r t E x p o r t P i x e l s % 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateImportExportPixels() validates the pixel import and export methods. 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% It returns the number of validation tests that passed and failed. 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateImportExportPixels method is: 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 851bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateImportExportPixels(ImageInfo *image_info, 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 853bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 868bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateImportExportPixels(ImageInfo *image_info, 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 870bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distortion; 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *difference_image, 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reference_image, 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reconstruct_image; 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 883bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixels; 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 893bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) output_filename; 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate the import and export of image pixels:\n"); 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; reference_map[i] != (char *) NULL; i++) 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; reference_storage[j].type != UndefinedPixel; j++) 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Generate reference image. 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 90775a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s/%s",(double) (test++), 908042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy reference_map[i],CommandOptionToMnemonic(MagickStorageOptions, 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_storage[j].type)); 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename,reference_filename, 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 91566688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleNCompare(reference_map[i],"cmy",3) == 0) 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) TransformImageColorspace(reference_image,CMYKColorspace); 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=strlen(reference_map[i])*reference_image->columns* 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->rows*reference_storage[j].quantum; 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=(unsigned char *) AcquireQuantumMemory(length,sizeof(*pixels)); 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixels == (unsigned char *) NULL) 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92666688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(pixels,0,length*sizeof(*pixels)); 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=ExportImagePixels(reference_image,0,0,reference_image->columns, 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->rows,reference_map[i],reference_storage[j].type,pixels, 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception); 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93766688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=(unsigned char *) RelinquishMagickMemory(pixels); 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetImageBackgroundColor(reference_image); 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=ImportImagePixels(reference_image,0,0,reference_image->columns, 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->rows,reference_map[i],reference_storage[j].type, 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels); 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95066688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=(unsigned char *) RelinquishMagickMemory(pixels); 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read reconstruct image. 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=AcquireImage(image_info); 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetImageExtent(reconstruct_image,reference_image->columns, 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image->rows); 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetImageColorspace(reconstruct_image,reference_image->colorspace); 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetImageBackgroundColor(reconstruct_image); 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=ImportImagePixels(reconstruct_image,0,0,reconstruct_image->columns, 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image->rows,reference_map[i],reference_storage[j].type, 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels); 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reconstruct_image->exception); 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=(unsigned char *) RelinquishMagickMemory(pixels); 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 97166688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Compare reference to reconstruct image. 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=CompareImageChannels(reference_image,reconstruct_image, 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AllChannels,MeanSquaredErrorMetric,&distortion,exception); 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reconstruct_image=DestroyImage(reconstruct_image); 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (difference_image == (Image *) NULL) 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 98566688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy difference_image=DestroyImage(difference_image); 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((distortion/QuantumRange) > 0.0) 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 992e7f5109f30fc7242d04a26174a9138483dda5b6acristy (void) fprintf(stdout,"... fail (with distortion %g).\n", 9938cd5b3193212b4aebce08c4e7afbb66b09778029cristy distortion/QuantumRange); 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 100075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 100175a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 100275a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e M o n t a g e C o m m a n d % 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateMontageCommand() validates the ImageMagick montage command line 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateMontageCommand method is: 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1022bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateMontageCommand(ImageInfo *image_info, 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 1024bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 10373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1039bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateMontageCommand(ImageInfo *image_info, 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 1041bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1053bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1057bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate montage command line program:\n"); 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; montage_options[i] != (char *) NULL; i++) 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 106575a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) (test++), 10666aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy montage_options[i]); 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s %s %s", 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_filename,montage_options[i],reference_filename, 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename); 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 107366688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MontageImageCommand(image_info,number_arguments,arguments, 10783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 10793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 10813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 10823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 10833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 108466688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 109075a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 109175a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 109275a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% V a l i d a t e S t r e a m C o m m a n d % 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ValidateStreamCommand() validates the ImageMagick stream command line 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program and returns the number of validation tests that passed and failed. 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ValidateStreamCommand method is: 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1112bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t ValidateStreamCommand(ImageInfo *image_info, 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reference_filename,const char *output_filename, 1114bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t *fail,ExceptionInfo *exception) 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reference_filename: the reference image filename. 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o output_filename: the output image filename. 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o fail: return the number of validation tests that pass. 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1129bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic size_t ValidateStreamCommand(ImageInfo *image_info, 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reference_filename,const char *output_filename, 1131bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t *fail,ExceptionInfo *exception) 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **arguments, 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy command[MaxTextExtent]; 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_arguments; 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1143bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1147bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test; 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy test=0; 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"validate stream command line program:\n"); 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; stream_options[i] != (char *) NULL; i++) 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 115575a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout," test %.20g: %s",(double) (test++), 11566aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy stream_options[i]); 11573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) FormatMagickString(command,MaxTextExtent,"%s %s %s", 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stream_options[i],reference_filename,output_filename); 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=StringToArgv(command,&number_arguments); 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (arguments == (char **) NULL) 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 116266688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=StreamImageCommand(image_info,number_arguments,arguments, 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char **) NULL,exception); 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_arguments; j++) 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments[j]=DestroyString(arguments[j]); 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy arguments=(char **) RelinquishMagickMemory(arguments); 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != MagickFalse) 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 117366688e5d7ff2a642cdb1b3bd97b1ddae755f5dc1cristy (void) fprintf(stdout,"... fail @ %s/%s/%lu.\n",GetMagickModule()); 11743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*fail)++; 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"... pass.\n"); 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 117975a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 118075a2623568540f98985ce5bb1d88687eb9c85d2ecristy " summary: %.20g subtests; %.20g passed; %.20g failed.\n",(double) test, 118175a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) (test-(*fail)),(double) *fail); 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(test); 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% M a i n % 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType ValidateUsage(void) 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p; 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *miscellaneous[]= 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-debug events display copious debugging information", 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-help print program options", 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-log format format of debugging information", 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-validate type validation type", 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-version print version information", 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *settings[]= 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-regard-warnings pay attention to warning messages", 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-verbose print detailed information about the image", 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1221bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL)); 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf("Copyright: %s\n\n",GetMagickCopyright()); 1223b28d64742e55a8b565085faf37e9aead51f89a83cristy (void) printf("Features: %s\n",GetMagickFeatures()); 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf("Usage: %s [options ...] reference-file\n",GetClientName()); 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf("\nValidate Settings:\n"); 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=settings; *p != (char *) NULL; p++) 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf(" %s\n",*p); 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf("\nMiscellaneous Options:\n"); 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=miscellaneous; *p != (char *) NULL; p++) 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) printf(" %s\n",*p); 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristyint main(int argc,char **argv) 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DestroyValidate() \ 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ \ 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=DestroyImageInfo(image_info); \ 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); \ 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ThrowValidateException(asperity,tag,option) \ 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ \ 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \ 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy option); \ 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); \ 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DestroyValidate(); \ 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); \ 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename[MaxTextExtent], 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_filename[MaxTextExtent], 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *option; 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy elapsed_time, 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy user_time; 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reference_image; 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ImageInfo 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image_info; 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy regard_warnings, 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1272bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy TimerInfo 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *timer; 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1278bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fail, 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy iterations, 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests; 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ValidateType 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Validate the ImageMagick image processing suite. 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickCoreGenesis(*argv,MagickFalse); 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy iterations=1; 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type=AllValidate; 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy regard_warnings=MagickFalse; 1294d886290b2a32bf23bbdc19b883f32cd4d364b310cristy (void) regard_warnings; 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=AcquireImageInfo(); 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename,ReferenceFilename,MaxTextExtent); 1298bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=1; i < (ssize_t) argc; i++) 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy option=argv[i]; 1301042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy if (IsCommandOption(option) == MagickFalse) 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename,option,MaxTextExtent); 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (*(option+1)) 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'b': 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("bench",option+1) == 0) 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1312e27293e706ca05b6b121e9512a83b16f7ad887f2cristy iterations=StringToUnsignedLong(argv[++i]); 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'd': 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("debug",option+1) == 0) 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetLogEventMask(argv[++i]); 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'h': 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("help",option+1) == 0) 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ValidateUsage(); 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'l': 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("log",option+1) == 0) 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*option != '+') 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetLogFormat(argv[i+1]); 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'r': 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("regard-warnings",option+1) == 0) 13483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy regard_warnings=MagickTrue; 13503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 'v': 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("validate",option+1) == 0) 13573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1358bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 13593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy validate; 13603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*option == '+') 13623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i++; 1364bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (i == (ssize_t) argc) 13653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"MissingArgument",option); 1366042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy validate=ParseCommandOption(MagickValidateOptions,MagickFalse, 13673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]); 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (validate < 0) 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedValidateType", 13703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy argv[i]); 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type=(ValidateType) validate; 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((LocaleCompare("version",option+1) == 0) || 13753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare("-version",option+1) == 0)) 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"Version: %s\n", 1378bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy GetMagickVersion((size_t *) NULL)); 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"Copyright: %s\n\n",GetMagickCopyright()); 1380104cea817534e8601291610f22e496c10f8f9ddbcristy (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures()); 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowValidateException(OptionError,"UnrecognizedOption",option) 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1389205e21f9b7ffdf5b0e48642ba0981b239959f8a9cristy timer=(TimerInfo *) NULL; 13908b76e556a4f5e2cdd916c1c52a9af375a57ca4a6cristy if (iterations > 1) 13918b76e556a4f5e2cdd916c1c52a9af375a57ca4a6cristy timer=AcquireTimerInfo(); 13923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=ReadImage(image_info,exception); 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests=0; 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fail=0; 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reference_image == (Image *) NULL) 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fail++; 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->filename,ReferenceFilename) == 0) 14003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(reference_image->magick,ReferenceImageFormat, 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) AcquireUniqueFilename(reference_filename); 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) AcquireUniqueFilename(output_filename); 14043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(reference_image->filename,reference_filename, 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=WriteImage(image_info,reference_image); 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InheritException(exception,&reference_image->exception); 14083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reference_image=DestroyImage(reference_image); 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 14103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fail++; 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"Version: %s\n", 1414bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy GetMagickVersion((size_t *) NULL)); 14153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"Copyright: %s\n\n", 14163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetMagickCopyright()); 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fprintf(stdout,"ImageMagick Validation Suite (%s)\n\n", 1418042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy CommandOptionToMnemonic(MagickValidateOptions,(ssize_t) type)); 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & CompareValidate) != 0) 14203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateCompareCommand(image_info,reference_filename, 14213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & CompositeValidate) != 0) 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateCompositeCommand(image_info,reference_filename, 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & ConvertValidate) != 0) 14263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateConvertCommand(image_info,reference_filename, 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & FormatsInMemoryValidate) != 0) 14293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateImageFormatsInMemory(image_info,reference_filename, 14303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & FormatsOnDiskValidate) != 0) 14323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateImageFormatsOnDisk(image_info,reference_filename, 14333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & IdentifyValidate) != 0) 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateIdentifyCommand(image_info,reference_filename, 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & ImportExportValidate) != 0) 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateImportExportPixels(image_info,reference_filename, 14393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & MontageValidate) != 0) 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateMontageCommand(image_info,reference_filename, 14423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type & StreamValidate) != 0) 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tests+=ValidateStreamCommand(image_info,reference_filename, 14453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy output_filename,&fail,exception); 144675a2623568540f98985ce5bb1d88687eb9c85d2ecristy (void) fprintf(stdout, 144775a2623568540f98985ce5bb1d88687eb9c85d2ecristy "validation suite: %.20g tests; %.20g passed; %.20g failed.\n", 144875a2623568540f98985ce5bb1d88687eb9c85d2ecristy (double) tests,(double) (tests-fail),(double) fail); 14493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RelinquishUniqueFileResource(output_filename); 14513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RelinquishUniqueFileResource(reference_filename); 14523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (exception->severity != UndefinedException) 14543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CatchException(exception); 14553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (iterations > 1) 14563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy elapsed_time=GetElapsedTime(timer); 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy user_time=GetUserTime(timer); 14598cd5b3193212b4aebce08c4e7afbb66b09778029cristy (void) fprintf(stderr, 146075a2623568540f98985ce5bb1d88687eb9c85d2ecristy "Performance: %.20gi %gips %0.3fu %ld:%02ld.%03ld\n",(double) 14616aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy iterations,1.0*iterations/elapsed_time,user_time,(long) 14626aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy (elapsed_time/60.0),(long) ceil(fmod(elapsed_time,60.0)), 14636aa47adc8b43dfdf8d1c2b6323c0bb1f57a5f011cristy (long) (1000.0*(elapsed_time-floor(elapsed_time)))); 14648b76e556a4f5e2cdd916c1c52a9af375a57ca4a6cristy timer=DestroyTimerInfo(timer); 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DestroyValidate(); 14673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickCoreTerminus(); 14683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(fail == 0 ? 0 : 1); 14693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1470