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

// Regression test for b/162922506: verify that compiler does not use signed
// 16-bit integers to store class ids for slots.

import 'dart:io';

import 'package:expect/expect.dart';
import 'package:path/path.dart' as p;

void main() async {
  Directory tmp = await Directory.systemTemp.createTemp("b162922506");
  File testBody = File(p.join(tmp.path, 'test.dart'));
  try {
    generateTestBody(testBody);
    final result = await Process.run(Platform.executable, [
      ...Platform.executableArguments,
      '--deterministic',
      '--optimization-counter-threshold=10',
      '--no-use-osr',
      testBody.path
    ]);
    if (result.exitCode != 0) {
      print('''
Subprocess output:
${result.stdout}
${result.stderr}
''');
    }
    Expect.equals(0, result.exitCode);
    Expect.equals("OK", (result.stdout as String).trim());
  } finally {
    await tmp.delete(recursive: true);
  }
}

void generateTestBody(File testBody) {
  final sb = StringBuffer();

  sb.write("""
import 'package:expect/expect.dart';
""");
  final n = 0x8010;
  for (var i = 0; i < n; i++) {
    sb.write("""
class C$i {
  final f;
  C$i(this.f);

""");
    if (i == (n - 1)) {
      sb.write("""
  test({bool rareCase: false}) {
    final v = this.f;
    if (rareCase) {
      return v.f;
    }
    return null;
  }
""");
    }
    sb.write("""

}
""");
  }
  sb.write("""
void main() {
  final obj = C${n - 1}(C${n - 2}(C${n - 3}(null)));
  for (var i = 0; i < 100; i++) obj.test();
  Expect.isTrue(obj.test(rareCase: true) is C${n - 3});
  print("OK");
}
  """);

  testBody.writeAsStringSync(sb.toString());
}
