// Copyright (c) 2011, 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.
// Operator dart test program.

import "package:expect/expect.dart";

class Helper {
  int i;
  Helper(int val) : i = val {}
  operator [](int index) {
    return i + index;
  }

  void operator []=(int index, int val) {
    i = val;
  }
}

main() {
  Helper obj = new Helper(10);
  Expect.equals(10, obj.i);
  obj[10] = 20;
  Expect.equals(30, obj[10]);

  regress32754();
}

// Regression test for https://github.com/dart-lang/sdk/issues/32754
class C {
  operator []=(i, value) {
    value = 'OOPS';
  }
}

class C2 {
  late int data;
  operator []=(i, value) {
    // The return expression must be evaluated, then ignored.
    return () {
      data = i + value;
      return null;
    }();
  }
}

regress32754() {
  var c = new C();
  Expect.equals('ok', c[0] = 'ok');

  var c2 = new C2();
  Expect.equals(23, c2[100] = 23);
  Expect.equals(123, c2.data);
}
