// 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.

// @dart = 2.9

import 'package:expect/expect.dart';
import 'static_extension_constant_lib.dart' hide b, i, d, s;
import 'static_extension_constant_lib.dart' as lib show b, i, d, s;

// Ensure that all expressions in runtimeExtensionCalls invoke
// an extension method rather than an instance method, such that
// static_extension_constant_error_test gets an error for them all.

const dynamic b = lib.b;
const dynamic i = lib.i;
const dynamic d = lib.d;
const dynamic s = lib.s;

// These expressions should be identical to those in
// `lib.runtimeExtensionCalls`.
var dynamicInstanceCalls = <Object>[
  ~i,
  b & b,
  b | b,
  b ^ b,
  i ~/ i,
  i >> i,
  i << i,
  i + i,
  -i,
  d - d,
  d * d,
  d / d,
  d % d,
  d < i,
  i <= d,
  d > i,
  i >= i,
  s.length,
];

void main() {
  for (int i = 0; i < dynamicInstanceCalls.length; ++i) {
    Expect.notEquals(dynamicInstanceCalls[i], runtimeExtensionCalls[i]);
  }
}
