// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion int strategy
///  final
/// Tunes the compression algorithm. Use the value ZLibOption.strategyDefault
/// for normal data, ZLibOption.strategyFiltered for data produced by a filter
/// (or predictor), ZLibOption.strategyHuffmanOnly to force Huffman encoding
/// only (no string match), or ZLibOption.strategyRle to limit match distances
/// to one (run-length encoding).
/// @description Checks that this property returns constructor's strategy
/// argument and data, compressed with different strategy has different size
/// @author sgrekhov@unipro.ru

import "dart:io";
import "../../../Utils/expect.dart";

main() {
  GZipCodec codec1 = new GZipCodec();
  Expect.equals(ZLibOption.strategyDefault, codec1.strategy);

  GZipCodec codec2 = new GZipCodec(strategy: ZLibOption.strategyHuffmanOnly);
  Expect.equals(ZLibOption.strategyHuffmanOnly, codec2.strategy);

  int max = 1000;
  List<int> data = new List<int>.filled(max, 0);
  for (int i = 0; i < max; i++) {
    data[i] = i % 256;
  }

  var encoded1 = codec1.encode(data);
  var encoded2 = codec2.encode(data);
  Expect.isTrue(encoded2.length != encoded1.length);

  codec2 = new GZipCodec(strategy: ZLibOption.strategyRle);
  encoded2 = codec2.encode(data);
  Expect.isTrue(encoded2.length != encoded1.length);

}
