// Copyright (c) 2013, 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.

// @dart = 2.9

/// @assertion bool movePrevious()
/// Move back to the previous element.Returns true and updates [current] if
/// successful.
/// @description Checks that true is returned and [current] is updated correctly.
/// @author msyabro


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

void check(string) {
  var runes = new Runes(string);
  var it = new RuneIterator(string);
  it.reset(string.length);

  for(int i = runes.length - 1; i >=0; --i) {
    var res = it.movePrevious();
    Expect.equals(runes.elementAt(i), it.current);
    Expect.isTrue(res);
  }
}

main() {
  check('abcdefghijklmnopqrstuvwxyz1234567890');
  check('\u{10000}\u{13000}\u{1d001}');
}
