// Copyright (c) 2019, 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 A shift expression of the form super op e2 is equivalent
 * to the method invocation super.op(e2).
 * @description Checks that an expressions of the form super << e2
 * is equivalent to the method invocation super.operator<<(e2).
 * @author iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=triple-shift

import '../../../Utils/expect.dart';

var logStr = "";

class S {
  operator >>>(var v) {
    logStr = "${logStr}>>>";
    return true;
  }
}

class A extends S {
  test() {
    logStr = "";
    super >>> 1;
    Expect.equals(">>>", logStr);
  }
}

main() {
  A a = new A();
  a.test();
}
