blob: b182eeff917b4a17f103af7fd03a6eaf17608257 [file] [log] [blame]
// 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.
import "package:expect/expect.dart";
// Check that indexed access to lists throws correct exception if index
// is not int.
main() {
checkList(new List(10));
var growable = new List();
growable.add(1);
growable.add(1);
checkList(growable);
}
checkList(var list) {
// Check unoptimized.
Expect.isFalse(checkCatch(getIt, list, 1));
Expect.isTrue(checkCatch(getIt, list, "hi"));
Expect.isFalse(checkCatch(putIt, list, 1));
Expect.isTrue(checkCatch(putIt, list, "hi"));
// Optimize 'getIt' and 'putIt'.
for (int i = 0; i < 2000; i++) {
putIt(list, 1);
getIt(list, 1);
}
Expect.isTrue(checkCatch(getIt, list, "hi"));
Expect.isTrue(checkCatch(putIt, list, "hi"));
}
checkCatch(var f, var list, var index) {
try {
f(list, index);
} on ArgumentError catch (e) {
return true;
} on TypeError catch (t) {
return true; // thrown in type checked mode.
}
return false;
}
getIt(var a, var i) {
return a[i];
}
putIt(var a, var i) {
a[i] = null;
}