(* * 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 Robert Atkey on ocaml-lib-devel@lists.sourceforge.net 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; ]