aboutsummaryrefslogtreecommitdiff
path: root/tests/test_info.c
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2008-06-18 18:02:10 +0300
committerLasse Collin <lasse.collin@tukaani.org>2008-06-18 18:02:10 +0300
commit7d17818cec8597f847b0a2537fde991bbc3d9e96 (patch)
tree9c41502e3eb96f103fe98e13456b382fbba7a292 /tests/test_info.c
parentUpdate the file format specification draft. The new one is (diff)
downloadxz-7d17818cec8597f847b0a2537fde991bbc3d9e96.tar.xz
Update the code to mostly match the new simpler file format
specification. Simplify things by removing most of the support for known uncompressed size in most places. There are some miscellaneous changes here and there too. The API of liblzma has got many changes and still some more will be done soon. While most of the code has been updated, some things are not fixed (the command line tool will choke with invalid filter chain, if nothing else). Subblock filter is somewhat broken for now. It will be updated once the encoded format of the Subblock filter has been decided.
Diffstat (limited to 'tests/test_info.c')
-rw-r--r--tests/test_info.c717
1 files changed, 0 insertions, 717 deletions
diff --git a/tests/test_info.c b/tests/test_info.c
deleted file mode 100644
index 0de95431..00000000
--- a/tests/test_info.c
+++ /dev/null
@@ -1,717 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-//
-/// \file test_info.c
-/// \brief Tests functions handling the lzma_info structure
-//
-// Copyright (C) 2007 Lasse Collin
-//
-// 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.
-//
-// 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.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "tests.h"
-
-
-static lzma_info *info = NULL;
-static lzma_info_iter iter;
-
-static lzma_vli stream_start = 0;
-static lzma_vli header_metadata_size = LZMA_VLI_VALUE_UNKNOWN;
-static lzma_vli total_size = LZMA_VLI_VALUE_UNKNOWN;
-static lzma_vli uncompressed_size = LZMA_VLI_VALUE_UNKNOWN;
-static lzma_vli footer_metadata_size = LZMA_VLI_VALUE_UNKNOWN;
-
-static lzma_index my_index[3] = {
- { 22, 33, my_index + 1 },
- { 44, 55, my_index + 2 },
- { 66, 77, NULL },
-};
-
-static lzma_metadata my_metadata = {
- .header_metadata_size = 11,
- .total_size = 22 + 44 + 66,
- .uncompressed_size = 33 + 55 + 77,
- .index = my_index,
- .extra = NULL,
-};
-
-
-static void
-reset(void)
-{
- expect(lzma_info_init(info, NULL) == info);
- stream_start = 0;
- header_metadata_size = LZMA_VLI_VALUE_UNKNOWN;
- total_size = LZMA_VLI_VALUE_UNKNOWN;
- uncompressed_size = LZMA_VLI_VALUE_UNKNOWN;
- footer_metadata_size = LZMA_VLI_VALUE_UNKNOWN;
-}
-
-
-static void
-validate(void)
-{
- expect(lzma_info_size_get(info, LZMA_INFO_STREAM_START)
- == stream_start);
- expect(lzma_info_size_get(info, LZMA_INFO_HEADER_METADATA)
- == header_metadata_size);
- expect(lzma_info_size_get(info, LZMA_INFO_TOTAL) == total_size);
- expect(lzma_info_size_get(info, LZMA_INFO_UNCOMPRESSED)
- == uncompressed_size);
- expect(lzma_info_size_get(info, LZMA_INFO_FOOTER_METADATA)
- == footer_metadata_size);
-}
-
-
-static void
-test1(void)
-{
- // Basics
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START,
- stream_start = 1234) == LZMA_OK);
- validate();
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA,
- header_metadata_size = 2345) == LZMA_OK);
- validate();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, total_size = 3456)
- == LZMA_OK);
- validate();
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- uncompressed_size = 4567) == LZMA_OK);
- validate();
- expect(lzma_info_size_set(info, LZMA_INFO_FOOTER_METADATA,
- footer_metadata_size = 5432) == LZMA_OK);
- validate();
-
- // Not everything allow zero size
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START,
- stream_start = 0) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA,
- header_metadata_size = 0) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- uncompressed_size = 0) == LZMA_OK);
- validate();
-
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 0)
- == LZMA_PROG_ERROR);
-
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_FOOTER_METADATA, 0)
- == LZMA_PROG_ERROR);
-
- // Invalid sizes
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START,
- LZMA_VLI_VALUE_MAX + 1) == LZMA_PROG_ERROR);
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA,
- LZMA_VLI_VALUE_MAX + 1) == LZMA_PROG_ERROR);
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL,
- LZMA_VLI_VALUE_MAX + 1) == LZMA_PROG_ERROR);
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- LZMA_VLI_VALUE_MAX + 1) == LZMA_PROG_ERROR);
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_FOOTER_METADATA,
- LZMA_VLI_VALUE_MAX + 1) == LZMA_PROG_ERROR);
-
- reset();
-}
-
-
-static bool
-test2_helper(lzma_vli *num, lzma_info_size type)
-{
- expect(lzma_info_size_set(info, type, *num = 1234) == LZMA_OK);
- validate();
- const bool ret = lzma_info_size_set(info, type, 4321) != LZMA_OK;
- reset();
- return ret;
-}
-
-
-static void
-test2(void)
-{
- // Excluding start offset of Stream, once a size has been set,
- // trying to set some other known value fails.
- expect(!test2_helper(&stream_start, LZMA_INFO_STREAM_START));
- expect(test2_helper(&header_metadata_size, LZMA_INFO_HEADER_METADATA));
- expect(test2_helper(&total_size, LZMA_INFO_TOTAL));
- expect(test2_helper(&uncompressed_size, LZMA_INFO_UNCOMPRESSED));
- expect(test2_helper(&footer_metadata_size, LZMA_INFO_FOOTER_METADATA));
-}
-
-
-static void
-test3_init(void)
-{
- reset();
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
-}
-
-
-static void
-test3(void)
-{
- // Setting the same sizes multiple times for the same Index Record
- // is OK, but the values must always be the same.
- test3_init();
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_set(&iter, 1111, 2345) == LZMA_DATA_ERROR);
-
- // Cannot finish an empty Index.
- test3_init();
- expect(lzma_info_index_finish(info) == LZMA_DATA_ERROR);
-
- test3_init();
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_index_finish(info) == LZMA_DATA_ERROR);
-
- test3_init();
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_index_finish(info) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 1234) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 2345)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 1111)
- == LZMA_DATA_ERROR);
-
- test3_init();
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_iter_set(&iter, 4321, 5432) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_index_finish(info) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 1234 + 4321)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 2345 + 5432)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 1111)
- == LZMA_DATA_ERROR);
-
- test3_init();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 1234 + 4321)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 2345 + 5432)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 1111)
- == LZMA_DATA_ERROR);
- expect(lzma_info_iter_set(&iter, 1234, 2345) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_iter_set(&iter, 4321, 5432) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 2);
- expect(lzma_info_index_finish(info) == LZMA_OK);
-
- test3_init();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, 1000) == LZMA_OK);
- expect(lzma_info_iter_set(&iter, 1001, 2001) == LZMA_DATA_ERROR);
-
- test3_init();
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED, 2000)
- == LZMA_OK);
- expect(lzma_info_iter_set(&iter, 1001, 2001) == LZMA_DATA_ERROR);
-
- reset();
-}
-
-
-static void
-test4(void)
-{
- // 4a
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_index_count_get(info) == 0);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 1);
-
- expect(lzma_info_iter_set(&iter, 22, 33) == LZMA_OK);
- expect(iter.total_size == 22);
- expect(iter.uncompressed_size == 33);
- expect(iter.stream_offset == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 1);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_offset == 33);
-
- // 4b
- reset();
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_index_count_get(info) == 0);
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START, 5) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA, 11)
- == LZMA_OK);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 1);
-
- expect(lzma_info_iter_set(&iter, 22, 33) == LZMA_OK);
- expect(iter.total_size == 22);
- expect(iter.uncompressed_size == 33);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 1);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11 + 22);
- expect(iter.uncompressed_offset == 33);
- expect(lzma_info_index_count_get(info) == 2);
-
- expect(lzma_info_iter_set(&iter, 44, 55) == LZMA_OK);
- expect(iter.total_size == 44);
- expect(iter.uncompressed_size == 55);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11 + 22);
- expect(iter.uncompressed_offset == 33);
- expect(lzma_info_index_count_get(info) == 2);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44);
- expect(iter.uncompressed_offset == 33 + 55);
- expect(lzma_info_index_count_get(info) == 3);
-
- expect(lzma_info_iter_set(&iter, 66, 77) == LZMA_OK);
- expect(iter.total_size == 66);
- expect(iter.uncompressed_size == 77);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44);
- expect(iter.uncompressed_offset == 33 + 55);
- expect(lzma_info_index_count_get(info) == 3);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66);
- expect(iter.uncompressed_offset == 33 + 55 + 77);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_set(&iter, 88, 99) == LZMA_OK);
- expect(iter.total_size == 88);
- expect(iter.uncompressed_size == 99);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66);
- expect(iter.uncompressed_offset == 33 + 55 + 77);
- expect(lzma_info_index_count_get(info) == 4);
-
- // 4c (continues from 4b)
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == 22);
- expect(iter.uncompressed_size == 33);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_set(&iter, 22, LZMA_VLI_VALUE_UNKNOWN)
- == LZMA_OK);
- expect(iter.total_size == 22);
- expect(iter.uncompressed_size == 33);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == 44);
- expect(iter.uncompressed_size == 55);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11 + 22);
- expect(iter.uncompressed_offset == 33);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_set(&iter, LZMA_VLI_VALUE_UNKNOWN, 55)
- == LZMA_OK);
- expect(iter.total_size == 44);
- expect(iter.uncompressed_size == 55);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11 + 22);
- expect(iter.uncompressed_offset == 33);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == 66);
- expect(iter.uncompressed_size == 77);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44);
- expect(iter.uncompressed_offset == 33 + 55);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_set(&iter, LZMA_VLI_VALUE_UNKNOWN,
- LZMA_VLI_VALUE_UNKNOWN) == LZMA_OK);
- expect(iter.total_size == 66);
- expect(iter.uncompressed_size == 77);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44);
- expect(iter.uncompressed_offset == 33 + 55);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == 88);
- expect(iter.uncompressed_size == 99);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66);
- expect(iter.uncompressed_offset == 33 + 55 + 77);
- expect(lzma_info_index_count_get(info) == 4);
-
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66 + 88);
- expect(iter.uncompressed_offset == 33 + 55 + 77 + 99);
- expect(lzma_info_index_count_get(info) == 5);
-
- expect(lzma_info_iter_set(&iter, 1234, LZMA_VLI_VALUE_UNKNOWN)
- == LZMA_OK);
- expect(iter.total_size == 1234);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66 + 88);
- expect(iter.uncompressed_offset == 33 + 55 + 77 + 99);
- expect(lzma_info_index_count_get(info) == 5);
-
- // Test 4d (continues from 4c)
- lzma_info_iter_begin(info, &iter);
- for (size_t i = 0; i < 4; ++i)
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(lzma_info_iter_set(&iter, 88, 99) == LZMA_OK);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.total_size == 1234);
- expect(iter.uncompressed_size == LZMA_VLI_VALUE_UNKNOWN);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66 + 88);
- expect(iter.uncompressed_offset == 33 + 55 + 77 + 99);
- expect(lzma_info_index_count_get(info) == 5);
-
- expect(lzma_info_iter_set(&iter, LZMA_VLI_VALUE_UNKNOWN, 4321)
- == LZMA_OK);
- expect(iter.total_size == 1234);
- expect(iter.uncompressed_size == 4321);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE
- + 11 + 22 + 44 + 66 + 88);
- expect(iter.uncompressed_offset == 33 + 55 + 77 + 99);
- expect(lzma_info_index_count_get(info) == 5);
-
- expect(lzma_info_index_finish(info) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 5);
-
- // Test 4e (continues from 4d)
- lzma_info_iter_begin(info, &iter);
- for (size_t i = 0; i < 5; ++i)
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(lzma_info_iter_set(&iter, 1234, 4321) == LZMA_OK);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_DATA_ERROR);
-
- reset();
-}
-
-
-static void
-test5(void)
-{
- lzma_index *i;
-
- expect(lzma_info_index_set(info, NULL, NULL, true)
- == LZMA_PROG_ERROR);
-
- reset();
- expect(lzma_info_index_set(info, NULL, my_index, false) == LZMA_OK);
- i = lzma_index_dup(my_index, NULL);
- expect(i != NULL);
- i->next->uncompressed_size = 99;
- expect(lzma_info_index_set(info, NULL, i, true) == LZMA_DATA_ERROR);
-
- reset();
- expect(lzma_info_index_set(info, NULL, my_index, false) == LZMA_OK);
- i = lzma_index_dup(my_index, NULL);
- expect(i != NULL);
- lzma_index_free(i->next->next, NULL);
- i->next->next = NULL;
- expect(lzma_info_index_set(info, NULL, i, true) == LZMA_DATA_ERROR);
-
- reset();
- expect(lzma_info_index_set(info, NULL, my_index, false) == LZMA_OK);
- i = lzma_index_dup(my_index, NULL);
- expect(i != NULL);
- lzma_index_free(i->next->next, NULL);
- i->next->next = lzma_index_dup(my_index, NULL);
- expect(i->next->next != NULL);
- expect(lzma_info_index_set(info, NULL, i, true) == LZMA_DATA_ERROR);
-
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL,
- total_size = 22 + 44 + 66) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- uncompressed_size = 33 + 55 + 77) == LZMA_OK);
- validate();
- expect(lzma_info_index_set(info, NULL, my_index, false) == LZMA_OK);
- validate();
-
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL, total_size = 77)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- uncompressed_size = 33 + 55 + 77) == LZMA_OK);
- validate();
- expect(lzma_info_index_set(info, NULL, my_index, false)
- == LZMA_DATA_ERROR);
-
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_TOTAL,
- total_size = 22 + 44 + 66) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_UNCOMPRESSED,
- uncompressed_size = 777777) == LZMA_OK);
- validate();
- expect(lzma_info_index_set(info, NULL, my_index, false)
- == LZMA_DATA_ERROR);
-
- reset();
-}
-
-
-static void
-test6(void)
-{
- lzma_metadata metadata;
-
- // Same complete Metadata in both Header and Footer
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA,
- my_metadata.header_metadata_size) == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, false, false)
- == LZMA_OK);
-
- // Header Metadata is not present but Size of Header Metadata is
- // still present in Footer.
- reset();
- metadata = my_metadata;
- metadata.header_metadata_size = 0;
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA, 0)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, false, false)
- == LZMA_DATA_ERROR);
-
- // Header Metadata is present but Size of Header Metadata is missing
- // from Footer.
- reset();
- metadata = my_metadata;
- metadata.header_metadata_size = 0;
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA,
- my_metadata.header_metadata_size) == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &metadata, false, false)
- == LZMA_DATA_ERROR);
-
- // Index missing
- reset();
- metadata = my_metadata;
- metadata.index = NULL;
- expect(lzma_info_metadata_set(info, NULL, &metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &metadata, false, false)
- == LZMA_DATA_ERROR);
-
- // Index in Header Metadata but not in Footer Metadata
- reset();
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &metadata, false, false)
- == LZMA_OK);
-
- // Index in Header Metadata but not in Footer Metadata but
- // Total Size is missing from Footer.
- reset();
- metadata.total_size = LZMA_VLI_VALUE_UNKNOWN;
- expect(lzma_info_metadata_set(info, NULL, &my_metadata, true, false)
- == LZMA_OK);
- expect(lzma_info_metadata_set(info, NULL, &metadata, false, false)
- == LZMA_DATA_ERROR);
-
- // Total Size doesn't match the Index
- reset();
- metadata = my_metadata;
- metadata.total_size = 9999;
- expect(lzma_info_metadata_set(info, NULL, &metadata, true, false)
- == LZMA_DATA_ERROR);
-
- // Uncompressed Size doesn't match the Index
- reset();
- metadata = my_metadata;
- metadata.uncompressed_size = 9999;
- expect(lzma_info_metadata_set(info, NULL, &metadata, true, false)
- == LZMA_DATA_ERROR);
-
- reset();
-}
-
-
-static void
-test7(void)
-{
- // No info yet, so we cannot locate anything.
- expect(lzma_info_metadata_locate(info, true)
- == LZMA_VLI_VALUE_UNKNOWN);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- // Setting the Stream start offset doesn't change this situation.
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START, 5) == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == LZMA_VLI_VALUE_UNKNOWN);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- // Setting the Size of Header Metadata known allows us to locate
- // the Header Metadata Block.
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA, 11)
- == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == 5 + LZMA_STREAM_HEADER_SIZE);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- // Adding a Data Block. As long as Index is not Finished, we cannot
- // locate Footer Metadata Block.
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_iter_next(&iter, NULL) == LZMA_OK);
- expect(iter.stream_offset == 5 + LZMA_STREAM_HEADER_SIZE + 11);
- expect(iter.uncompressed_offset == 0);
- expect(lzma_info_iter_set(&iter, 22, 33) == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == 5 + LZMA_STREAM_HEADER_SIZE);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- // Once the Index is finished, we can locate Footer Metadata Block too.
- expect(lzma_info_index_finish(info) == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == 5 + LZMA_STREAM_HEADER_SIZE);
- expect(lzma_info_metadata_locate(info, false)
- == 5 + LZMA_STREAM_HEADER_SIZE + 11 + 22);
-
- // A retry of most of the above but now with unknown Size of Header
- // Metadata Block, which makes locating Footer Metadata Block
- // impossible.
- reset();
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START, 5) == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == LZMA_VLI_VALUE_UNKNOWN);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- expect(lzma_info_index_set(info, NULL, my_index, false) == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == LZMA_VLI_VALUE_UNKNOWN);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_VLI_VALUE_UNKNOWN);
-
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA, 11)
- == LZMA_OK);
- expect(lzma_info_metadata_locate(info, true)
- == 5 + LZMA_STREAM_HEADER_SIZE);
- expect(lzma_info_metadata_locate(info, false)
- == LZMA_STREAM_HEADER_SIZE + 5 + 11 + 22 + 44 + 66);
-
- reset();
-}
-
-
-static void
-test8(void)
-{
- expect(lzma_info_size_set(info, LZMA_INFO_STREAM_START, 5) == LZMA_OK);
- expect(lzma_info_size_set(info, LZMA_INFO_HEADER_METADATA, 11)
- == LZMA_OK);
-
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_iter_locate(&iter, NULL, 0, false)
- == LZMA_DATA_ERROR);
- expect(lzma_info_index_count_get(info) == 0);
-
- lzma_info_iter_begin(info, &iter);
- expect(lzma_info_iter_locate(&iter, NULL, 0, true) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
- expect(lzma_info_iter_locate(&iter, NULL, 0, false) == LZMA_OK);
- expect(lzma_info_index_count_get(info) == 1);
-
- // TODO
-}
-
-
-/*
-static void
-test9(void)
-{
- // TODO Various integer overflow checks
-}
-*/
-
-
-int
-main(void)
-{
- lzma_init();
-
- info = lzma_info_init(NULL, NULL);
- if (info == NULL)
- return 1;
-
- validate();
-
- test1();
- test2();
- test3();
- test4();
- test5();
- test6();
- test7();
- test8();
-
- lzma_info_free(info, NULL);
- return 0;
-}