
  * ExtLib Testing Suite 
  * Copyright ( C ) 2004 , 2007   
  * 
  * This library is free software ; you can redistribute it and/or 
  * modify it under the terms of the GNU Lesser General Public 
  * License as published by the Free Software Foundation ; either 
  * version 2.1 of the License , or ( at your option ) any later version , 
  * with the special exception on linking described in file LICENSE . 
  * 
  * This library is distributed in the hope that it will be useful , 
  * but WITHOUT ANY WARRANTY ; without even the implied warranty of 
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .   See the GNU 
  * Lesser General Public License for more details . 
  * 
  * You should have received a copy of the GNU Lesser General Public 
  * License along with this library ; if not , write to the Free Software 
  * Foundation , Inc. , 59 Temple Place , Suite 330 , Boston , MA   02111 - 1307   USA 
 
 * ExtLib Testing Suite
 * Copyright (C) 2004, 2007 Janne Hellsten
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version,
 * with the special exception on linking described in file LICENSE.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)

  test_unzip_bug1 test case was contributed by   on 
     on Nov 26 , 2007 .  
    Thanks  !
    on Nov 26, 2007.  
   Thanks Rob! *)

let test_unzip_bug1 () =
  let test data =
    let input    = IO.input_string data in
    let unzipped = Unzip.inflate input in
    try
      let str      = IO.read_all unzipped in
      assert (str = "XY")
    with Unzip.Error Unzip.Invalid_data -> assert false
  in
  this is " XY " compressed by zlib at level 9
  test "\x78\xda\x8b\x88\x04\x00\x01\x0b\x00\xb2";
  this is " XY " compressed by zlib at level 0
  test "\x78\x01\x01\x02\x00\xfd\xff\x58\x59\x01\x0b\x00\xb2"

(* Some zlib compressed strings with various compression levels.  See
   extlib-test/util/zlib-test/gen_ml.sh for more info.  This is not
   very exhaustive but is still better than nothing.  The generation
   script should be pretty easy to extend to cover longer strings. *)
let inputs = 
  [("a", "\x78\x01\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\x5e\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\x9c\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\xda\x4b\x04\x00\x00\x62\x00\x62");
   ("b", "\x78\x01\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\x5e\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\x9c\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\xda\x4b\x02\x00\x00\x63\x00\x63");
   ("c", "\x78\x01\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\x5e\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\x9c\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\xda\x4b\x06\x00\x00\x64\x00\x64");
   ("aa", "\x78\x01\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\x5e\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\x9c\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\xda\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aaa", "\x78\x01\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\x5e\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\x9c\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\xda\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaaa", "\x78\x01\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\x5e\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\x9c\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\xda\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("foobar", "\x78\x01\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\x5e\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\x9c\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\xda\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("012345678", "\x78\x01\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\x5e\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\x9c\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\xda\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("00000000", "\x78\x01\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\x5e\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\x9c\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\xda\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("aaaaaaaaaa", "\x78\x01\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\x5e\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\x9c\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\xda\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("-------------------------aaaaaaaaa------------------", "\x78\x01\xd3\xd5\xc5\x01\x12\x61\x00\x53\x1e\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x53\x1e\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x5d\x42\x57\x17\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x9c\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\xda\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9")]

let test_unzip_gen_inputs () =
  let test orig data =
    let input    = IO.input_string data in
    let unzipped = Unzip.inflate input in
    try
      let str      = IO.read_all unzipped in
      assert (str = orig)
    with Unzip.Error Unzip.Invalid_data -> assert false
  in
  List.iter
    (fun (orig,compressed) ->
       test orig compressed)
    inputs

let () = 
  Util.register "Unzip" [
    "bug1", test_unzip_bug1;
    "gen_inputs", test_unzip_gen_inputs;
  ]

 Some zlib compressed strings with various compression levels.  See
   extlib-test/util/zlib-test/gen_ml.sh for more info.  This is not
   very exhaustive but is still better than nothing.  The generation
   script should be pretty easy to extend to cover longer strings. 

  * ExtLib Testing Suite 
  * Copyright ( C ) 2004 , 2007   
  * 
  * This library is free software ; you can redistribute it and/or 
  * modify it under the terms of the GNU Lesser General Public 
  * License as published by the Free Software Foundation ; either 
  * version 2.1 of the License , or ( at your option ) any later version , 
  * with the special exception on linking described in file LICENSE . 
  * 
  * This library is distributed in the hope that it will be useful , 
  * but WITHOUT ANY WARRANTY ; without even the implied warranty of 
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .   See the GNU 
  * Lesser General Public License for more details . 
  * 
  * You should have received a copy of the GNU Lesser General Public 
  * License along with this library ; if not , write to the Free Software 
  * Foundation , Inc. , 59 Temple Place , Suite 330 , Boston , MA   02111 - 1307   USA 
 
 * ExtLib Testing Suite
 * Copyright (C) 2004, 2007 Janne Hellsten
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version,
 * with the special exception on linking described in file LICENSE.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)

  test_unzip_bug1 test case was contributed by   on 
     on Nov 26 , 2007 .  
    Thanks  !
    on Nov 26, 2007.  
   Thanks Rob! *)

let test_unzip_bug1 () =
  let test data =
    let input    = IO.input_string data in
    let unzipped = Unzip.inflate input in
    try
      let str      = IO.read_all unzipped in
      assert (str = "XY")
    with Unzip.Error Unzip.Invalid_data -> assert false
  in
  this is " XY " compressed by zlib at level 9
  test "\x78\xda\x8b\x88\x04\x00\x01\x0b\x00\xb2";
  this is " XY " compressed by zlib at level 0
  test "\x78\x01\x01\x02\x00\xfd\xff\x58\x59\x01\x0b\x00\xb2"

let inputs = 
  [("a", "\x78\x01\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\x5e\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\x9c\x4b\x04\x00\x00\x62\x00\x62");
   ("a", "\x78\xda\x4b\x04\x00\x00\x62\x00\x62");
   ("b", "\x78\x01\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\x5e\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\x9c\x4b\x02\x00\x00\x63\x00\x63");
   ("b", "\x78\xda\x4b\x02\x00\x00\x63\x00\x63");
   ("c", "\x78\x01\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\x5e\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\x9c\x4b\x06\x00\x00\x64\x00\x64");
   ("c", "\x78\xda\x4b\x06\x00\x00\x64\x00\x64");
   ("aa", "\x78\x01\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\x5e\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\x9c\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aa", "\x78\xda\x4b\x4c\x04\x00\x01\x25\x00\xc3");
   ("aaa", "\x78\x01\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\x5e\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\x9c\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaa", "\x78\xda\x4b\x4c\x4c\x04\x00\x02\x49\x01\x24");
   ("aaaa", "\x78\x01\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\x5e\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\x9c\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("aaaa", "\x78\xda\x4b\x4c\x4c\x4c\x04\x00\x03\xce\x01\x85");
   ("foobar", "\x78\x01\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\x5e\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\x9c\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("foobar", "\x78\xda\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a");
   ("012345678", "\x78\x01\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\x5e\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\x9c\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("012345678", "\x78\xda\x33\x30\x34\x32\x36\x31\x35\x33\xb7\x00\x00\x08\xf1\x01\xd5");
   ("00000000", "\x78\x01\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\x5e\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\x9c\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("00000000", "\x78\xda\x33\x30\x80\x00\x00\x06\xc8\x01\x81");
   ("aaaaaaaaaa", "\x78\x01\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\x5e\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\x9c\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("aaaaaaaaaa", "\x78\xda\x4b\x4c\x84\x01\x00\x14\xe1\x03\xcb");
   ("-------------------------aaaaaaaaa------------------", "\x78\x01\xd3\xd5\xc5\x01\x12\x61\x00\x53\x1e\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x53\x1e\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x5d\x42\x57\x17\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x5e\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\x9c\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9");
   ("-------------------------aaaaaaaaa------------------", "\x78\xda\xd3\xd5\xc5\x01\x12\x61\x00\x53\x0a\x00\x1c\x89\x0a\xf9")]

let test_unzip_gen_inputs () =
  let test orig data =
    let input    = IO.input_string data in
    let unzipped = Unzip.inflate input in
    try
      let str      = IO.read_all unzipped in
      assert (str = orig)
    with Unzip.Error Unzip.Invalid_data -> assert false
  in
  List.iter
    (fun (orig,compressed) ->
       test orig compressed)
    inputs

let () = 
  Util.register "Unzip" [
    "bug1", test_unzip_bug1;
    "gen_inputs", test_unzip_gen_inputs;
  ]
