// 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 Converter<List<int>, TT> fuse<TT>(Converter<List<int>, TT> other)
/// Fuses this with other.
/// Encoding with the resulting converter is equivalent to converting with this
/// before converting with other.
/// @description Checks that encoding with the resulting converter is equivalent
/// to converting with this before converting with other.
/// @author ngl@unipro.ru

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

check(Converter fused, List<int> l) {
  Expect.listEquals(l, fused.convert(l));
}

main() {
  ZLibEncoder encoder = new ZLibEncoder();
  ZLibDecoder decoder = new ZLibDecoder();
  Converter fused = decoder.fuse(new ZLibEncoder());

  Expect.listEquals(encoder.convert([]), fused.convert(<int>[]));

  for (int i = 0; i < 10; i++) {
    List<int> data = encoder.convert(new List<int>.generate(i, (int i) => i));
    Expect.listEquals(data, fused.convert(data));
  }
}
