/*
 * 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 level
 *  final
 * The compression-level can be set in the range of -1..9, with 6 being the
 * default compression level. Levels above 6 will have higher compression rates
 * at the cost of more CPU and memory usage. Levels below 6 will use less CPU
 * and memory at the cost of lower compression rates.
 * @description Checks that this property returns constructor's level argument
 * @author sgrekhov@unipro.ru
 * @issue 31039
 */
import "dart:io";
import "../../../Utils/expect.dart";

main() {
  GZipCodec codec1 = new GZipCodec(level: -1);
  Expect.equals(-1, codec1.level);

  GZipCodec codec2 = new GZipCodec(level: 9);
  Expect.equals(9, codec2.level);

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