home *** CD-ROM | disk | FTP | other *** search
/ Voyagers to the Outer Planets 2: Uranus / VoyagestotheOuterPlanetsVol2.cdr / software / detest.c < prev    next >
Text File  |  1988-09-14  |  16KB  |  359 lines

  1. /*****************************************************************************
  2. *
  3. *_TITLE detest - Test performance of decompression routines.
  4. *
  5. *_DESCR The detest program tests the performance of the decompression
  6. *       subroutines. The decompression subroutines have been tested
  7. *       on a varitey of computer hardware confurations and operating
  8. *       systems. However, because of subtle differences of C-language
  9. *       compilers and computer hardware, there is no assurance that
  10. *       they will correctly function on your system. If problems
  11. *       occur while trying to install the decompression software on your 
  12. *       system, this program can be run to verify the performance of the
  13. *       subroutines.
  14. *
  15. *       The detest program has three arrays containing fixed values.  
  16. *       The first array, hist, contains the values of a first-difference 
  17. *       histogram. This array is passed to the decmpinit subroutine for 
  18. *       initialization of the Huffman coding tree.  The second array, 
  19. *       lin_in, contains the values of an image-line which has been 
  20. *       compressed. This array is passed to the decompress subroutine
  21. *       for decompression of the line. The output of the decompress
  22. *       routine is placed in the lin_out array and is compared, sample
  23. *       by sample, with the lin_tst array.  The lin_tst array contains
  24. *       the correct values of the decompression subroutine. If there
  25. *       is a mismatch then a failure is reported.
  26. *
  27. *_LIMS  Detest and the decompression routines were tested on a VAX 
  28. *       computer running under Version 4.6 of VMS, a micro-VAX computer 
  29. *       under version 2.2 of ULTRIX, an IBM/PC running under version 2.2 
  30. *       of Microsoft, and a SUN work station running under version 4.2,
  31. *       release 3.4, of UNIX.
  32. *
  33. *_HIST  01-March-1988 Eric Eliason, USGS Flagstaff, original verison
  34. *****************************************************************************/
  35.       long hist[512] = {
  36.     12,     6,     13,      3,     13,     15,     13,     49,      8,     7,
  37.     13,     8,     16,      4,     17,     33,     13,      8,     11,     3,
  38.     26,     4,     15,     42,     19,      6,     19,     12,      3,     4,
  39.     19,    10,      7,     11,     13,      3,     21,     11,      3,    45,
  40.     14,     6,     14,      8,     15,      8,     13,     43,      2,     7,
  41.     15,    18,     11,      3,     13,     14,     14,     11,     10,     5,
  42.     14,     6,     12,     50,     15,      5,     15,      4,      7,     5,
  43.     16,    33,      9,      5,     15,      4,    436,      7,      4,    22,
  44.     20,     8,      4,      7,     15,      4,     14,     23,      5,     3,
  45.     15,     9,      4,      6,     13,     29,     17,      5,      4,     3,
  46.     16,     6,      5,     36,     32,      4,     43,      3,     39,     3,
  47.     53,    21,     32,      3,    106,      4,     78,      4,     14,    32,
  48.     18,     6,     10,      4,     24,      3,     20,     41,     14,     3,
  49.     29,     4,     17,      5,     15,     16,     17,      5,      3,     4,
  50.     17,     5,      8,     28,     13,      3,     14,      6,      7,     7,
  51.     13,    31,      6,      5,     13,      4,     19,      5,      4,    41,
  52.     14,    10,      9,      3,     14,      5,     21,     44,      8,     4,
  53.     14,    11,      7,      6,     15,      9,     20,      3,      6,     5,
  54.     22,     8,      9,     30,     22,      3,     20,     10,      3,    11,
  55.     19,    39,      2,     13,     13,      3,     27,      8,      9,    22,
  56.     16,    10,      4,     11,     14,     13,     21,     59,      3,    25,
  57.     13,    25,      8,     31,     15,     72,     26,     50,      6,    47,
  58.     14,    71,      5,    486,     17,     65,     21,     59,      8,    48,
  59.     20,    49,     17,     66,     14,     97,     20,    103,      6,   155,
  60.     35,   157,     15,    152,     17,    247,     15,    367,      8,  1147,
  61.     14,  9225,     24, 113488,     23, 405608,   1073, 112576,    126,  9256,
  62.     86,  1179,     94,    441,    109,    347,     95,    187,     10,   183,
  63.      4,   148,     31,    192,     92,    139,     71,    298,    274,   137,
  64.     14,    43,     21,     40,    406,     40,     20,     49,     13,    67,
  65.      5,    59,     17,     79,      6,     72,     30,     54,      6,    23,
  66.     11,    19,     13,     21,     23,     14,     22,     19,      5,    24,
  67.      4,    11,     17,      6,      9,      9,     28,      4,      3,    24,
  68.     23,    34,     19,     12,      6,     10,     20,     11,     12,    31,
  69.    813,     8,     25,      5,      6,      5,     38,      9,      6,    18,
  70.      6,    13,     14,      4,     23,      9,     24,      3,     85,    94,
  71.     87,    94,     99,     90,     83,     85,    100,     85,      3,    26,
  72.      8,    22,     13,      5,     13,      7,     19,      7,     17,    14,
  73.      3,     7,     27,      6,      3,      5,     21,     12,     13,    14,
  74.      5,     7,     14,      3,     26,      7,     16,      8,      8,    18,
  75.      4,     3,     23,     16,      6,      4,     16,      5,      3,    14,
  76.      4,    19,     16,      4,      3,      3,     15,      6,     10,    21,
  77.      3,     6,     15,      4,      3,      8,     28,      6,      8,    16,
  78.      8,    10,     15,      3,     26,     24,     14,      3,      8,    17,
  79.      5,    13,     19,      3,     11,      4,     17,      5,      6,    15,
  80.     24,    20,     15,      4,      9,      4,     16,      8,      3,    28,
  81.     21,    13,     25,     11,      3,      3,     21,     17,     10,    17,
  82.      4,    11,     13,      9,     22,     17,     25,      5,     10,    24,
  83.      4,    12,     25,     18,      3,     13,     19,     11,      9,    16,
  84.      6,    34,     26,      6,      8,      6,     27,      3,     16,    13,
  85.     11,     9,     14,      5,      7,      4,     26,      8,      3,    17,
  86.      8,    12,     13,     14,      3,      3,     23,      6,      4,    12,
  87.      1,     0};
  88.  
  89.       long len_in = { 227};
  90.       char lin_in[227] = { 
  91. '\034','\352','\215','\066','\026',
  92. '\145','\107','\030','\306','\233',
  93. '\346','\313','\161','\070','\240',
  94. '\037','\036','\062','\301','\216',
  95. '\227','\055','\247','\036','\322',
  96. '\332','\134','\122','\124','\226',
  97. '\063','\143','\313','\372','\031',
  98. '\154','\041','\227','\225','\370',
  99. '\111','\151','\162','\306','\316',
  100. '\227','\161','\264','\217','\330',
  101. '\317','\216','\347','\067','\377',
  102. '\151','\154','\307','\313','\217',
  103. '\342','\242','\226','\137','\227',
  104. '\270','\317','\161','\315','\225',
  105. '\046','\315','\226','\131','\122',
  106. '\130','\240','\330','\347','\270',
  107. '\322','\367','\377','\140','\243',
  108. '\057','\122','\154','\146','\301',
  109. '\103','\202','\213','\217','\057',
  110. '\317','\335','\245','\307','\036',
  111. '\136','\311','\161','\264','\356',
  112. '\052','\107','\145','\221','\332',
  113. '\137','\274','\334','\037','\124',
  114. '\056','\155','\057','\352','\245',
  115. '\212','\115','\366','\224','\320',
  116. '\313','\052','\052','\116','\342',
  117. '\201','\332','\135','\245','\307',
  118. '\151','\250','\145','\111','\343',
  119. '\370','\241','\246','\322','\241',
  120. '\103','\216','\225','\166','\106',
  121. '\227','\024','\013','\111','\143',
  122. '\037','\032','\133','\140','\306',
  123. '\132','\134','\123','\113','\366',
  124. '\130','\066','\026','\322','\307',
  125. '\330','\306','\166','\166','\161',
  126. '\214','\154','\330','\077','\145',
  127. '\242','\315','\014','\156','\270',
  128. '\177','\377','\377','\377','\377',
  129. '\377','\377','\377','\377','\377',
  130. '\377','\377','\377','\377','\377',
  131. '\377','\377','\377','\377','\376',
  132. '\205','\100','\135','\026','\274',
  133. '\122','\072','\361','\110','\372',
  134. '\374','\224','\260','\377','\377',
  135. '\361','\035','\035','\174','\144',
  136. '\033','\200'};
  137.  
  138.       long len_out = { 836};
  139.       char lin_out[836];
  140.       char lin_tst[836] = { 
  141. '\034','\034','\034','\034','\030',
  142. '\030','\032','\030','\034','\034',
  143. '\032','\034','\036','\036','\034',
  144. '\036','\036','\036','\040','\040',
  145. '\034','\036','\036','\036','\036',
  146. '\040','\036','\040','\036','\040',
  147. '\036','\042','\042','\040','\040',
  148. '\040','\040','\042','\042','\042',
  149. '\040','\042','\042','\040','\036',
  150. '\036','\040','\044','\044','\044',
  151. '\046','\042','\044','\046','\050',
  152. '\046','\046','\046','\046','\050',
  153. '\046','\046','\046','\050','\046',
  154. '\050','\050','\046','\050','\052',
  155. '\050','\052','\050','\050','\054',
  156. '\052','\052','\054','\054','\052',
  157. '\050','\054','\054','\054','\056',
  158. '\054','\054','\054','\052','\056',
  159. '\054','\052','\056','\054','\054',
  160. '\056','\052','\056','\052','\056',
  161. '\054','\056','\054','\056','\056',
  162. '\056','\054','\056','\054','\054',
  163. '\054','\056','\056','\054','\054',
  164. '\054','\054','\054','\054','\044',
  165. '\024','\014','\024','\050','\054',
  166. '\056','\056','\054','\060','\056',
  167. '\056','\060','\060','\056','\060',
  168. '\056','\054','\056','\056','\056',
  169. '\056','\062','\060','\060','\056',
  170. '\056','\060','\056','\054','\060',
  171. '\062','\060','\060','\060','\060',
  172. '\060','\056','\060','\056','\060',
  173. '\060','\060','\060','\060','\060',
  174. '\062','\060','\060','\056','\056',
  175. '\060','\060','\060','\060','\062',
  176. '\062','\062','\060','\060','\060',
  177. '\060','\060','\060','\060','\060',
  178. '\060','\060','\056','\062','\060',
  179. '\056','\060','\060','\060','\062',
  180. '\060','\060','\060','\060','\062',
  181. '\062','\060','\060','\062','\060',
  182. '\060','\060','\060','\060','\060',
  183. '\062','\056','\056','\060','\054',
  184. '\062','\060','\060','\060','\060',
  185. '\060','\062','\062','\060','\060',
  186. '\060','\056','\056','\060','\056',
  187. '\060','\060','\060','\060','\060',
  188. '\056','\056','\060','\056','\056',
  189. '\060','\060','\060','\056','\060',
  190. '\060','\054','\060','\060','\056',
  191. '\060','\060','\060','\056','\060',
  192. '\060','\056','\060','\060','\056',
  193. '\060','\060','\054','\060','\056',
  194. '\060','\054','\056','\060','\060',
  195. '\060','\056','\060','\056','\056',
  196. '\060','\060','\060','\060','\060',
  197. '\056','\056','\060','\056','\062',
  198. '\060','\060','\060','\056','\056',
  199. '\056','\056','\056','\056','\056',
  200. '\056','\056','\056','\054','\056',
  201. '\060','\054','\056','\056','\056',
  202. '\060','\060','\056','\056','\056',
  203. '\052','\056','\056','\054','\056',
  204. '\054','\056','\056','\056','\054',
  205. '\056','\060','\054','\056','\054',
  206. '\054','\056','\060','\054','\056',
  207. '\056','\054','\054','\056','\054',
  208. '\054','\054','\056','\056','\054',
  209. '\054','\054','\054','\054','\056',
  210. '\056','\056','\056','\056','\056',
  211. '\056','\054','\054','\052','\056',
  212. '\054','\054','\056','\054','\054',
  213. '\056','\054','\054','\054','\056',
  214. '\056','\054','\054','\054','\052',
  215. '\054','\054','\056','\056','\054',
  216. '\054','\056','\054','\052','\056',
  217. '\056','\056','\054','\054','\056',
  218. '\052','\052','\054','\054','\056',
  219. '\054','\054','\052','\054','\054',
  220. '\052','\054','\054','\056','\054',
  221. '\054','\052','\056','\054','\054',
  222. '\054','\054','\054','\052','\052',
  223. '\052','\054','\054','\054','\052',
  224. '\052','\054','\056','\054','\054',
  225. '\054','\054','\050','\050','\052',
  226. '\054','\054','\052','\052','\054',
  227. '\054','\054','\052','\056','\054',
  228. '\054','\054','\054','\054','\054',
  229. '\050','\050','\054','\052','\054',
  230. '\050','\054','\054','\052','\052',
  231. '\052','\052','\050','\054','\060',
  232. '\060','\050','\056','\052','\054',
  233. '\054','\050','\054','\054','\054',
  234. '\052','\052','\054','\050','\052',
  235. '\054','\052','\052','\050','\054',
  236. '\052','\052','\050','\054','\052',
  237. '\052','\054','\052','\052','\050',
  238. '\054','\054','\050','\052','\050',
  239. '\052','\052','\046','\052','\052',
  240. '\052','\052','\054','\052','\052',
  241. '\052','\052','\052','\052','\054',
  242. '\050','\052','\050','\054','\054',
  243. '\052','\056','\052','\054','\050',
  244. '\052','\050','\050','\052','\050',
  245. '\050','\054','\050','\050','\050',
  246. '\050','\046','\050','\050','\052',
  247. '\050','\054','\052','\052','\054',
  248. '\050','\052','\054','\046','\052',
  249. '\050','\052','\050','\052','\050',
  250. '\050','\050','\050','\052','\050',
  251. '\054','\052','\050','\046','\050',
  252. '\052','\050','\052','\050','\052',
  253. '\052','\050','\054','\052','\052',
  254. '\054','\050','\046','\052','\050',
  255. '\050','\050','\050','\050','\046',
  256. '\050','\050','\046','\050','\052',
  257. '\050','\046','\050','\052','\052',
  258. '\050','\046','\052','\050','\052',
  259. '\050','\050','\050','\050','\046',
  260. '\050','\046','\050','\046','\050',
  261. '\050','\050','\050','\046','\050',
  262. '\050','\050','\050','\046','\050',
  263. '\050','\050','\050','\052','\050',
  264. '\052','\050','\052','\050','\046',
  265. '\050','\050','\050','\046','\050',
  266. '\052','\050','\050','\050','\050',
  267. '\050','\046','\050','\050','\046',
  268. '\060','\056','\046','\050','\050',
  269. '\050','\046','\046','\000','\000',
  270. '\000','\000','\000','\000','\000',
  271. '\000','\000','\000','\000','\000',
  272. '\000','\000','\000','\000','\000',
  273. '\000','\000','\000','\000','\000',
  274. '\000','\000','\000','\000','\000',
  275. '\000','\000','\000','\000','\000',
  276. '\000','\000','\000','\000','\000',
  277. '\000','\000','\000','\000','\000',
  278. '\000','\000','\000','\000','\000',
  279. '\000','\000','\000','\000','\000',
  280. '\000','\000','\000','\000','\000',
  281. '\000','\000','\000','\000','\000',
  282. '\000','\000','\000','\000','\000',
  283. '\000','\000','\000','\000','\000',
  284. '\000','\000','\000','\000','\000',
  285. '\000','\000','\000','\000','\000',
  286. '\000','\000','\000','\000','\000',
  287. '\000','\000','\000','\000','\000',
  288. '\000','\000','\000','\000','\000',
  289. '\000','\000','\000','\000','\000',
  290. '\000','\000','\000','\000','\000',
  291. '\000','\000','\000','\000','\000',
  292. '\000','\000','\000','\000','\000',
  293. '\000','\000','\000','\000','\000',
  294. '\000','\000','\000','\000','\000',
  295. '\000','\000','\000','\000','\000',
  296. '\000','\000','\000','\000','\000',
  297. '\000','\000','\000','\000','\000',
  298. '\000','\000','\000','\000','\000',
  299. '\000','\000','\000','\000','\000',
  300. '\000','\000','\000','\000','\000',
  301. '\263','\150','\002','\000','\001',
  302. '\000','\001','\000','\000','\000',
  303. '\030','\024','\000','\000','\000',
  304. '\000','\000','\000','\000','\000',
  305. '\000','\000','\000','\000','\000',
  306. '\000','\000','\000','\000','\000',
  307. '\000','\002','\001','\000','\203',
  308. '\002' };
  309. /******************************************************************************
  310.  Call the DECMPINIT routine, pass the histogram so the huffman tree
  311.  can be built
  312. *******************************************************************************/
  313.       main ()
  314.       {
  315.       extern void decmpinit();
  316.       extern void decompress();
  317.       extern void swapit();
  318.       int  i,k,ifail;
  319.       swapit(hist);
  320.       decmpinit(hist);
  321.       ifail = 0;
  322.       for (k=0; k<2; ++k)
  323.       {
  324.          decompress(lin_in,lin_out,&len_in,&len_out);
  325.          for (i=0; i<836; ++i)
  326.          {
  327.          if (lin_out[i] != lin_tst[i]) 
  328.             { ifail = 1;
  329.               printf("Error, decompression routines failed\n");
  330.               printf(" sample number:            %d\n",i);
  331.               printf(" sample value should be:   %d\n",lin_tst[i]);
  332.               printf(" output of decompressinon: %d\n",lin_out[i]);
  333.              }
  334.          }
  335.       }
  336.       if (ifail == 0) printf("Decompression routines succeeded\n");
  337.       if (ifail != 0) printf("Decompression routines failed\n");
  338.       }
  339.       void swapit(longwords)
  340.       long int *longwords;
  341.       {
  342. /*****************************************************************************
  343. This routine will swap bytes of the histogram integer long words for computer
  344. hardware which stores long words in "most significant byte order first" order. 
  345. This is necessary because the DECOMPRESSION routines will automatically
  346. swap the byte order for this computer hardware.
  347. ******************************************************************************/
  348.       short int cnt;
  349.       for (cnt=512; cnt--;)
  350.          {
  351.          unsigned char *cp = (unsigned char *) longwords;
  352.          unsigned long int j;
  353.          short int i;
  354.          for (i=4; --i >= 0; j = (j<<8) | *(cp+i));
  355.          *longwords++ = j;
  356.          }
  357.       return;
  358.       }
  359.