anchor.diff:     *
      * This operation does not increase the length of `this`.
      *
  -   * An error occurs if the [index] is less than 0 or greater than length.
  -   * An error occurs if the [iterable] is longer than [length] - [index].
  +   * The [index] must be non-negative and no greater than [length].
  +   *
  +   * The [iterable] must not have more elements than what can fit from [index]
  +   * to [length].
  +   *
  +   * If `iterable` is based on this list, its values may change /during/ the
  +   * `setAll` operation.
      */
     void setAll(int index, Iterable<E> iterable);
   
  
positive.code: 
    /**
     * Copies the objects of [iterable], skipping [skipCount] objects first,
     * into the range [start] inclusive to [end] exclusive of `this`.
     *
     *     List<int> list1 = [1, 2, 3, 4];
     *     List<int> list2 = [5, 6, 7, 8, 9];
  
negative.code:    *     list1.setRange(1, 3, list2, 3);
     *     list1.join(', '); // '1, 8, 9, 4'
     *
     * The [start] and [end] indices must satisfy `0 ≤ start ≤ end ≤ length`.
     * If [start] equals [end], this method has no effect.
     *
     * The [iterable] must have enough objects to fill the range from `start`
     * to `end` after skipping [skipCount] objects.
     *
     * If `iterable` is this list, the operation will copy the elements originally
     * in the range from `skipCount` to `skipCount + (end - start)` to the
     * range `start` to `end`, even if the two ranges overlap.
     *
     * If `iterable` depends on this list in some other way, no guarantees are
     * made.
     */
    void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]);
  
  