Fossil

Hex Artifact Content
Login

Artifact b81342fb774937c210f5718ad5783f1eed13f7a7:


0000: 2f 2a 0a 20 2a 20 54 65 73 74 20 70 72 6f 67 72  /*. * Test progr
0010: 61 6d 20 66 6f 72 20 67 7a 69 66 73 74 72 65 61  am for gzifstrea
0020: 6d 20 61 6e 64 20 67 7a 6f 66 73 74 72 65 61 6d  m and gzofstream
0030: 0a 20 2a 0a 20 2a 20 62 79 20 4c 75 64 77 69 67  . *. * by Ludwig
0040: 20 53 63 68 77 61 72 64 74 20 3c 73 63 68 77 61   Schwardt <schwa
0050: 72 64 74 40 73 75 6e 2e 61 63 2e 7a 61 3e 0a 20  rdt@sun.ac.za>. 
0060: 2a 20 6f 72 69 67 69 6e 61 6c 20 76 65 72 73 69  * original versi
0070: 6f 6e 20 62 79 20 4b 65 76 69 6e 20 52 75 6c 61  on by Kevin Rula
0080: 6e 64 20 3c 6b 65 76 69 6e 40 72 6f 64 69 6e 2e  nd <kevin@rodin.
0090: 77 75 73 74 6c 2e 65 64 75 3e 0a 20 2a 2f 0a 0a  wustl.edu>. */..
00a0: 23 69 6e 63 6c 75 64 65 20 22 7a 66 73 74 72 65  #include "zfstre
00b0: 61 6d 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c  am.h".#include <
00c0: 69 6f 73 74 72 65 61 6d 3e 20 20 20 20 20 20 2f  iostream>      /
00d0: 2f 20 66 6f 72 20 63 6f 75 74 0a 0a 69 6e 74 20  / for cout..int 
00e0: 6d 61 69 6e 28 29 20 7b 0a 0a 20 20 67 7a 6f 66  main() {..  gzof
00f0: 73 74 72 65 61 6d 20 6f 75 74 66 3b 0a 20 20 67  stream outf;.  g
0100: 7a 69 66 73 74 72 65 61 6d 20 69 6e 66 3b 0a 20  zifstream inf;. 
0110: 20 63 68 61 72 20 62 75 66 5b 38 30 5d 3b 0a 0a   char buf[80];..
0120: 20 20 6f 75 74 66 2e 6f 70 65 6e 28 22 74 65 73    outf.open("tes
0130: 74 31 2e 74 78 74 2e 67 7a 22 29 3b 0a 20 20 6f  t1.txt.gz");.  o
0140: 75 74 66 20 3c 3c 20 22 54 68 65 20 71 75 69 63  utf << "The quic
0150: 6b 20 62 72 6f 77 6e 20 66 6f 78 20 73 69 64 65  k brown fox side
0160: 73 74 65 70 70 65 64 20 74 68 65 20 6c 61 7a 79  stepped the lazy
0170: 20 63 61 6e 69 6e 65 5c 6e 22 0a 20 20 20 20 20   canine\n".     
0180: 20 20 3c 3c 20 31 2e 33 20 3c 3c 20 22 5c 6e 50    << 1.3 << "\nP
0190: 6c 61 6e 20 22 20 3c 3c 20 39 20 3c 3c 20 73 74  lan " << 9 << st
01a0: 64 3a 3a 65 6e 64 6c 3b 0a 20 20 6f 75 74 66 2e  d::endl;.  outf.
01b0: 63 6c 6f 73 65 28 29 3b 0a 20 20 73 74 64 3a 3a  close();.  std::
01c0: 63 6f 75 74 20 3c 3c 20 22 57 72 6f 74 65 20 74  cout << "Wrote t
01d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 73  he following mes
01e0: 73 61 67 65 20 74 6f 20 27 74 65 73 74 31 2e 74  sage to 'test1.t
01f0: 78 74 2e 67 7a 27 20 28 63 68 65 63 6b 20 77 69  xt.gz' (check wi
0200: 74 68 20 7a 63 61 74 20 6f 72 20 7a 6c 65 73 73  th zcat or zless
0210: 29 3a 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20  ):\n".          
0220: 20 20 3c 3c 20 22 54 68 65 20 71 75 69 63 6b 20    << "The quick 
0230: 62 72 6f 77 6e 20 66 6f 78 20 73 69 64 65 73 74  brown fox sidest
0240: 65 70 70 65 64 20 74 68 65 20 6c 61 7a 79 20 63  epped the lazy c
0250: 61 6e 69 6e 65 5c 6e 22 0a 20 20 20 20 20 20 20  anine\n".       
0260: 20 20 20 20 20 3c 3c 20 31 2e 33 20 3c 3c 20 22       << 1.3 << "
0270: 5c 6e 50 6c 61 6e 20 22 20 3c 3c 20 39 20 3c 3c  \nPlan " << 9 <<
0280: 20 73 74 64 3a 3a 65 6e 64 6c 3b 0a 0a 20 20 73   std::endl;..  s
0290: 74 64 3a 3a 63 6f 75 74 20 3c 3c 20 22 5c 6e 52  td::cout << "\nR
02a0: 65 61 64 69 6e 67 20 27 74 65 73 74 31 2e 74 78  eading 'test1.tx
02b0: 74 2e 67 7a 27 20 28 62 75 66 66 65 72 65 64 29  t.gz' (buffered)
02c0: 20 70 72 6f 64 75 63 65 73 3a 5c 6e 22 3b 0a 20   produces:\n";. 
02d0: 20 69 6e 66 2e 6f 70 65 6e 28 22 74 65 73 74 31   inf.open("test1
02e0: 2e 74 78 74 2e 67 7a 22 29 3b 0a 20 20 77 68 69  .txt.gz");.  whi
02f0: 6c 65 20 28 69 6e 66 2e 67 65 74 6c 69 6e 65 28  le (inf.getline(
0300: 62 75 66 2c 38 30 2c 27 5c 6e 27 29 29 20 7b 0a  buf,80,'\n')) {.
0310: 20 20 20 20 73 74 64 3a 3a 63 6f 75 74 20 3c 3c      std::cout <<
0320: 20 62 75 66 20 3c 3c 20 22 5c 74 28 22 20 3c 3c   buf << "\t(" <<
0330: 20 69 6e 66 2e 72 64 62 75 66 28 29 2d 3e 69 6e   inf.rdbuf()->in
0340: 5f 61 76 61 69 6c 28 29 20 3c 3c 20 22 20 63 68  _avail() << " ch
0350: 61 72 73 20 6c 65 66 74 20 69 6e 20 62 75 66 66  ars left in buff
0360: 65 72 29 5c 6e 22 3b 0a 20 20 7d 0a 20 20 69 6e  er)\n";.  }.  in
0370: 66 2e 63 6c 6f 73 65 28 29 3b 0a 0a 20 20 6f 75  f.close();..  ou
0380: 74 66 2e 72 64 62 75 66 28 29 2d 3e 70 75 62 73  tf.rdbuf()->pubs
0390: 65 74 62 75 66 28 30 2c 30 29 3b 0a 20 20 6f 75  etbuf(0,0);.  ou
03a0: 74 66 2e 6f 70 65 6e 28 22 74 65 73 74 32 2e 74  tf.open("test2.t
03b0: 78 74 2e 67 7a 22 29 3b 0a 20 20 6f 75 74 66 20  xt.gz");.  outf 
03c0: 3c 3c 20 73 65 74 63 6f 6d 70 72 65 73 73 69 6f  << setcompressio
03d0: 6e 28 5a 5f 4e 4f 5f 43 4f 4d 50 52 45 53 53 49  n(Z_NO_COMPRESSI
03e0: 4f 4e 29 0a 20 20 20 20 20 20 20 3c 3c 20 22 54  ON).       << "T
03f0: 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66  he quick brown f
0400: 6f 78 20 73 69 64 65 73 74 65 70 70 65 64 20 74  ox sidestepped t
0410: 68 65 20 6c 61 7a 79 20 63 61 6e 69 6e 65 5c 6e  he lazy canine\n
0420: 22 0a 20 20 20 20 20 20 20 3c 3c 20 31 2e 33 20  ".       << 1.3 
0430: 3c 3c 20 22 5c 6e 50 6c 61 6e 20 22 20 3c 3c 20  << "\nPlan " << 
0440: 39 20 3c 3c 20 73 74 64 3a 3a 65 6e 64 6c 3b 0a  9 << std::endl;.
0450: 20 20 6f 75 74 66 2e 63 6c 6f 73 65 28 29 3b 0a    outf.close();.
0460: 20 20 73 74 64 3a 3a 63 6f 75 74 20 3c 3c 20 22    std::cout << "
0470: 5c 6e 57 72 6f 74 65 20 74 68 65 20 73 61 6d 65  \nWrote the same
0480: 20 6d 65 73 73 61 67 65 20 74 6f 20 27 74 65 73   message to 'tes
0490: 74 32 2e 74 78 74 2e 67 7a 27 20 69 6e 20 75 6e  t2.txt.gz' in un
04a0: 63 6f 6d 70 72 65 73 73 65 64 20 66 6f 72 6d 22  compressed form"
04b0: 3b 0a 0a 20 20 73 74 64 3a 3a 63 6f 75 74 20 3c  ;..  std::cout <
04c0: 3c 20 22 5c 6e 52 65 61 64 69 6e 67 20 27 74 65  < "\nReading 'te
04d0: 73 74 32 2e 74 78 74 2e 67 7a 27 20 28 75 6e 62  st2.txt.gz' (unb
04e0: 75 66 66 65 72 65 64 29 20 70 72 6f 64 75 63 65  uffered) produce
04f0: 73 3a 5c 6e 22 3b 0a 20 20 69 6e 66 2e 72 64 62  s:\n";.  inf.rdb
0500: 75 66 28 29 2d 3e 70 75 62 73 65 74 62 75 66 28  uf()->pubsetbuf(
0510: 30 2c 30 29 3b 0a 20 20 69 6e 66 2e 6f 70 65 6e  0,0);.  inf.open
0520: 28 22 74 65 73 74 32 2e 74 78 74 2e 67 7a 22 29  ("test2.txt.gz")
0530: 3b 0a 20 20 77 68 69 6c 65 20 28 69 6e 66 2e 67  ;.  while (inf.g
0540: 65 74 6c 69 6e 65 28 62 75 66 2c 38 30 2c 27 5c  etline(buf,80,'\
0550: 6e 27 29 29 20 7b 0a 20 20 20 20 73 74 64 3a 3a  n')) {.    std::
0560: 63 6f 75 74 20 3c 3c 20 62 75 66 20 3c 3c 20 22  cout << buf << "
0570: 5c 74 28 22 20 3c 3c 20 69 6e 66 2e 72 64 62 75  \t(" << inf.rdbu
0580: 66 28 29 2d 3e 69 6e 5f 61 76 61 69 6c 28 29 20  f()->in_avail() 
0590: 3c 3c 20 22 20 63 68 61 72 73 20 6c 65 66 74 20  << " chars left 
05a0: 69 6e 20 62 75 66 66 65 72 29 5c 6e 22 3b 0a 20  in buffer)\n";. 
05b0: 20 7d 0a 20 20 69 6e 66 2e 63 6c 6f 73 65 28 29   }.  inf.close()
05c0: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 0a  ;..  return 0;..
05d0: 7d 0a                                            }.