/*
 * 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 Cogec<List<int>, R> fuse<R>(Codec<List<int>, R> other)
 * Fuses this with other.
 * When encoding, the resulting codec encodes with this before encoding with
 * other.
 * When decoding, the resulting codec decodes with other before decoding with
 * this.
 * In some cases one needs to use the inverted codecs to be able to fuse them
 * correctly. That is, the output type of this (List<int>) must match the input
 * type of the second codec 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";

void check(Codec fused, List<int> expectedData) {
  Expect.listEquals(expectedData, fused.encode(expectedData));
  Expect.listEquals(expectedData, fused.decode(expectedData));
}

main() {
  ZLibCodec codec = new ZLibCodec();
  Codec<List<int>, dynamic> inverted = codec.inverted;
  Codec fused = codec.fuse(inverted);

  for (int i = 0; i < 10; i++) {
    List<int> data = new List.generate(i, (int i) => i);
    check(fused, data);
  }
  check(fused, []);
}
