# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# am8uxrdxyhtg27wy
# target_branch: bzr://bzr.sv.gnu.org/pdf/libgnupdf/trunk/
# testament_sha1: a32c1a3bd0c3e1c33a00513d355c27f3a2eb1ed3
# timestamp: 2011-08-03 12:03:10 +0200
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'torture/unit/Makefile.am'
--- torture/unit/Makefile.am 2011-06-24 16:18:43 +0000
+++ torture/unit/Makefile.am 2011-08-03 10:02:47 +0000
@@ -76,7 +76,8 @@
base/stm/pdf-stm-rw-filter-a85.c \
base/stm/pdf-stm-rw-filter-flate.c \
base/stm/pdf-stm-rw-filter-v2.c \
- base/stm/pdf-stm-rw-filter-aesv2.c
+ base/stm/pdf-stm-rw-filter-aesv2.c \
+ base/stm/pdf-stm-rw-filter-lzw.c
TEST_SUITE_HASH = base/hash/pdf-hash-new.c \
base/hash/pdf-hash-add.c \
=== added file 'torture/unit/base/stm/pdf-stm-rw-filter-lzw.c'
--- torture/unit/base/stm/pdf-stm-rw-filter-lzw.c 1970-01-01 00:00:00 +0000
+++ torture/unit/base/stm/pdf-stm-rw-filter-lzw.c 2011-08-03 10:02:47 +0000
@@ -0,0 +1,236 @@
+/* -*- mode: C -*-
+ *
+ * File: pdf-stm-read-filter-lzw.c
+ * Date: Fr July 29 15:50:09 2011
+ *
+ * GNU PDF Library - Unit tests for LZW filter.
+ *
+ */
+
+/* Copyright (C) 2011 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+
+#include
+#include
+#include
+#include
+#include "pdf-stm-test-common.h"
+
+struct test_strings_s {
+ /* LZW-Encoded string */
+ pdf_size_t encoded_size;
+ const pdf_char_t *encoded;
+ /* Decoded string */
+ pdf_size_t decoded_size;
+ const pdf_char_t *decoded;
+};
+
+static const struct test_strings_s test_strings[] = {
+ {
+ 240,
+ "\x80\x0c\x46\x43\x21\x9c\x14\x69\x07\x1a\x0d\x61\x50\xa1\xb4\x36"
+ "\x1c\x37\x88\x44\x46\xe3\x88\xa4\x56\x28\x39\x8c\x46\x63\x23\x08"
+ "\x14\x12\x0d\x08\x85\xc3\x21\xd0\xd8\x94\x46\x2d\x16\x8d\x4a\x63"
+ "\x90\x38\x28\xce\x11\x09\x90\xc8\xe4\x92\x58\x9c\x9e\x2f\x29\x8d"
+ "\xc7\x65\xb2\xf9\x08\xd6\x64\x36\x9a\x4d\x66\xd3\x89\xcc\xb2\x3f"
+ "\x07\x9e\xcf\xe8\x33\x69\xbd\x12\x57\x1e\x97\x48\x26\x33\x2a\x5d"
+ "\x32\x89\x18\xa7\xce\xea\x50\xba\x54\xd2\x98\x38\xab\x8e\x6b\x34"
+ "\x79\x85\x72\xa9\x5e\xab\x55\xec\x75\x1a\x45\x4e\x47\x55\xa1\xda"
+ "\xa7\x56\x4a\x4d\x9e\x4b\x5f\xb0\xda\xe7\x96\xe8\x7d\xa2\xe3\x4e"
+ "\xb9\xdb\x2c\xb2\x2b\x7d\xfa\x4f\x79\xc0\xde\xec\xd8\x5b\xbd\xa7"
+ "\x01\x46\xc1\x5d\x71\x91\x2b\xc5\xcb\x21\x8a\xc2\x5f\x71\xb7\xf9"
+ "\xc5\xea\xb7\x99\x99\xe6\xf0\xf9\x6a\x86\x62\x7d\x76\xca\x63\xb3"
+ "\xb8\x9c\xfe\x9f\x27\x26\xd5\x4a\xb5\x96\xdc\x5e\x6b\x53\x9c\xd9"
+ "\x65\xf5\xb5\xdd\x14\xa3\x49\x5a\xda\x68\x28\x18\x6d\xf6\x3f\x4b"
+ "\xbb\xd4\x6c\x37\x11\xac\xf7\x07\x5d\xb6\xe5\x68\xe9\xc0\x08\x08",
+ 1059,
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ "1223334444555556666667777777888888889999999990"
+ },
+ { 0, NULL, 0, NULL }
+};
+
+
+static const struct test_params_s tests_params[] = {
+ /* No Test type Test operation Loop read size Cache size */
+ { 1, TEST_TYPE_DECODER, TEST_OP_READ, LOOP_RW_SIZE_ONE, 0 },
+ { 2, TEST_TYPE_DECODER, TEST_OP_READ, LOOP_RW_SIZE_TWO, 0 },
+ { 3, TEST_TYPE_DECODER, TEST_OP_READ, LOOP_RW_SIZE_HALF, 0 },
+ { 4, TEST_TYPE_DECODER, TEST_OP_READ, LOOP_RW_SIZE_EXACT, 0 },
+ { 5, TEST_TYPE_DECODER, TEST_OP_READ, LOOP_RW_SIZE_DOUBLE, 0 },
+
+ { 6, TEST_TYPE_ENCODER, TEST_OP_READ, LOOP_RW_SIZE_ONE, 0 },
+ { 7, TEST_TYPE_ENCODER, TEST_OP_READ, LOOP_RW_SIZE_TWO, 0 },
+ { 8, TEST_TYPE_ENCODER, TEST_OP_READ, LOOP_RW_SIZE_HALF, 0 },
+ { 9, TEST_TYPE_ENCODER, TEST_OP_READ, LOOP_RW_SIZE_EXACT, 0 },
+ { 10, TEST_TYPE_ENCODER, TEST_OP_READ, LOOP_RW_SIZE_DOUBLE, 0 },
+
+ { 11, TEST_TYPE_DECODER, TEST_OP_WRITE, LOOP_RW_SIZE_ONE, 0 },
+ { 12, TEST_TYPE_DECODER, TEST_OP_WRITE, LOOP_RW_SIZE_TWO, 0 },
+ { 13, TEST_TYPE_DECODER, TEST_OP_WRITE, LOOP_RW_SIZE_HALF, 0 },
+ { 14, TEST_TYPE_DECODER, TEST_OP_WRITE, LOOP_RW_SIZE_EXACT, 0 },
+ { 15, TEST_TYPE_DECODER, TEST_OP_WRITE, LOOP_RW_SIZE_DOUBLE, 0 },
+
+ { 16, TEST_TYPE_ENCODER, TEST_OP_WRITE, LOOP_RW_SIZE_ONE, 0 },
+ { 17, TEST_TYPE_ENCODER, TEST_OP_WRITE, LOOP_RW_SIZE_TWO, 0 },
+ { 18, TEST_TYPE_ENCODER, TEST_OP_WRITE, LOOP_RW_SIZE_HALF, 0 },
+ { 19, TEST_TYPE_ENCODER, TEST_OP_WRITE, LOOP_RW_SIZE_EXACT, 0 },
+ { 20, TEST_TYPE_ENCODER, TEST_OP_WRITE, LOOP_RW_SIZE_DOUBLE, 0 },
+};
+
+static void
+common_test_lzw (const pdf_char_t *function_name,
+ int test_index)
+{
+ int i;
+ const struct test_params_s *params = &tests_params[test_index - 1];
+
+ /* Sanity check */
+ fail_if (test_index != params->idx);
+
+ for (i = 0; test_strings[i].encoded; i++)
+ {
+ pdf_stm_test_common (function_name,
+ params->type,
+ params->operation,
+ (params->type == TEST_TYPE_ENCODER ?
+ PDF_STM_FILTER_LZW_ENC :
+ PDF_STM_FILTER_LZW_DEC),
+ NULL,
+ params->stm_cache_size,
+ params->loop_size,
+ test_strings[i].decoded,
+ test_strings[i].decoded_size,
+ test_strings[i].encoded,
+ test_strings[i].encoded_size);
+ }
+}
+
+/*
+ * Test: pdf_stm_read_filter_lzw_dec_001-005
+ * Description:
+ * Test LZW decoder filter with different read loop sizes
+ * Success condition:
+ * The read data should be ok.
+ */
+START_TEST (pdf_stm_read_filter_lzw_dec_001) { common_test_lzw (__FUNCTION__, 1); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_dec_002) { common_test_lzw (__FUNCTION__, 2); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_dec_003) { common_test_lzw (__FUNCTION__, 3); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_dec_004) { common_test_lzw (__FUNCTION__, 4); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_dec_005) { common_test_lzw (__FUNCTION__, 5); } END_TEST
+
+/*
+ * Test: pdf_stm_read_filter_lzw_enc_001-005
+ * Description:
+ * Test LZW encoder filter with different read loop sizes
+ * Success condition:
+ * The read data should be ok.
+ */
+START_TEST (pdf_stm_read_filter_lzw_enc_001) { common_test_lzw (__FUNCTION__, 6); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_enc_002) { common_test_lzw (__FUNCTION__, 7); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_enc_003) { common_test_lzw (__FUNCTION__, 8); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_enc_004) { common_test_lzw (__FUNCTION__, 9); } END_TEST
+START_TEST (pdf_stm_read_filter_lzw_enc_005) { common_test_lzw (__FUNCTION__, 10); } END_TEST
+
+/*
+ * Test: pdf_stm_write_filter_lzw_dec_001-005
+ * Description:
+ * Test LZW decoder filter with different write loop sizes
+ * Success condition:
+ * The written data should be ok.
+ */
+START_TEST (pdf_stm_write_filter_lzw_dec_001) { common_test_lzw (__FUNCTION__, 11); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_dec_002) { common_test_lzw (__FUNCTION__, 12); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_dec_003) { common_test_lzw (__FUNCTION__, 13); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_dec_004) { common_test_lzw (__FUNCTION__, 14); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_dec_005) { common_test_lzw (__FUNCTION__, 15); } END_TEST
+
+/*
+ * Test: pdf_stm_write_filter_lzw_enc_001-005
+ * Description:
+ * Test LZW encoder filter with different write loop sizes
+ * Success condition:
+ * The written data should be ok.
+ */
+START_TEST (pdf_stm_write_filter_lzw_enc_001) { common_test_lzw (__FUNCTION__, 16); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_enc_002) { common_test_lzw (__FUNCTION__, 17); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_enc_003) { common_test_lzw (__FUNCTION__, 18); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_enc_004) { common_test_lzw (__FUNCTION__, 19); } END_TEST
+START_TEST (pdf_stm_write_filter_lzw_enc_005) { common_test_lzw (__FUNCTION__, 20); } END_TEST
+
+/*
+ * Test case creation functions
+ */
+
+TCase *
+test_pdf_stm_rw_filter_lzw (void)
+{
+ TCase *tc = tcase_create ("pdf_stm_rw_filter_lzw");
+
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_dec_001);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_dec_002);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_dec_003);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_dec_004);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_dec_005);
+
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_enc_001);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_enc_002);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_enc_003);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_enc_004);
+ tcase_add_test (tc, pdf_stm_read_filter_lzw_enc_005);
+
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_dec_001);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_dec_002);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_dec_003);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_dec_004);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_dec_005);
+
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_enc_001);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_enc_002);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_enc_003);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_enc_004);
+ tcase_add_test (tc, pdf_stm_write_filter_lzw_enc_005);
+
+ tcase_add_checked_fixture (tc,
+ pdf_test_setup,
+ pdf_test_teardown);
+ return tc;
+}
+
+/* End of pdf-stm-read-filter-lzw.c */
=== modified file 'torture/unit/base/stm/tsuite-stm.c'
--- torture/unit/base/stm/tsuite-stm.c 2011-05-17 22:17:31 +0000
+++ torture/unit/base/stm/tsuite-stm.c 2011-08-03 10:02:47 +0000
@@ -45,6 +45,7 @@
extern TCase *test_pdf_stm_rw_filter_flate (void);
extern TCase *test_pdf_stm_rw_filter_v2 (void);
extern TCase *test_pdf_stm_rw_filter_aesv2 (void);
+extern TCase *test_pdf_stm_rw_filter_lzw (void);
Suite *
tsuite_stm ()
@@ -70,6 +71,7 @@
suite_add_tcase (s, test_pdf_stm_rw_filter_v2 ());
suite_add_tcase (s, test_pdf_stm_rw_filter_aesv2 ());
suite_add_tcase (s, test_pdf_stm_flush ());
+ suite_add_tcase (s, test_pdf_stm_rw_filter_lzw ());
return s;
}
# Begin bundle
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
SX/i7kinChIKHVAsAA==