// 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 windowBits
/// final
/// Base two logarithm of the window size (the size of the history buffer). It
/// should be in the range 8..15. Larger values result in better compression at
/// the expense of memory usage. The default value is 15
/// @description Checks that this property returns constructor's windowBits
/// argument and data, compressed with different windowBits has different size
/// @author sgrekhov@unipro.ru

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

main() {
  GZipCodec codec1 = new GZipCodec();
  Expect.equals(15, codec1.windowBits);

  GZipCodec codec2 = new GZipCodec(windowBits: 8);
  Expect.equals(8, codec2.windowBits);

  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);
}
