|  | // Copyright (c) 2014, 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"; | 
|  | import "package:compiler/src/util/maplet.dart"; | 
|  |  | 
|  | void main() { | 
|  | for (int i = 1; i <= 32; i++) { | 
|  | test(i); | 
|  | } | 
|  | } | 
|  |  | 
|  | void test(int size) { | 
|  | final maplet = Maplet<int?, String>(); | 
|  | for (int i = 0; i < size; i++) { | 
|  | Expect.isTrue(maplet.isEmpty == (i == 0)); | 
|  | maplet[i] = '$i'; | 
|  | Expect.equals(i + 1, maplet.length); | 
|  | Expect.isFalse(maplet.isEmpty); | 
|  | for (int j = 0; j < size + size; j++) { | 
|  | Expect.isTrue(maplet[j] == ((j <= i) ? '$j' : null)); | 
|  | } | 
|  | Expect.equals('$i', maplet.remove(i)); | 
|  | Expect.isNull(maplet.remove(i + 1)); | 
|  | maplet[i] = '$i'; | 
|  |  | 
|  | List expectedKeys = []; | 
|  | List expectedValues = []; | 
|  | for (int j = 0; j <= i; j++) { | 
|  | expectedKeys.add(j); | 
|  | expectedValues.add('$j'); | 
|  | } | 
|  |  | 
|  | List actualKeys = []; | 
|  | List actualValues = []; | 
|  | maplet.forEach((eachKey, eachValue) { | 
|  | actualKeys.add(eachKey); | 
|  | actualValues.add(eachValue); | 
|  | }); | 
|  | Expect.listEquals(expectedKeys, actualKeys); | 
|  | Expect.listEquals(expectedValues, actualValues); | 
|  | Expect.listEquals(expectedKeys, maplet.keys.toList()); | 
|  | Expect.listEquals(expectedValues, maplet.values.toList()); | 
|  | } | 
|  |  | 
|  | for (int i = 0; i < size; i++) { | 
|  | Expect.equals(size, maplet.length); | 
|  |  | 
|  | // Try removing all possible ranges one by one and re-add them. | 
|  | for (int k = size; k > i; --k) { | 
|  | for (int j = i; j < k; j++) { | 
|  | Expect.equals('$j', maplet.remove(j)); | 
|  | int expectedSize = size - (j - i + 1); | 
|  | Expect.equals(expectedSize, maplet.length); | 
|  | Expect.isNull(maplet.remove(j)); | 
|  | Expect.isNull(maplet[j]); | 
|  |  | 
|  | Expect.isNull(maplet[null]); | 
|  | maplet[null] = 'null'; | 
|  | Expect.equals(expectedSize + 1, maplet.length); | 
|  | Expect.equals('null', maplet[null]); | 
|  | Expect.equals('null', maplet.remove(null)); | 
|  | Expect.equals(expectedSize, maplet.length); | 
|  | Expect.isNull(maplet.remove(null)); | 
|  | } | 
|  |  | 
|  | for (int j = i; j < k; j++) { | 
|  | maplet[j] = '$j'; | 
|  | } | 
|  | } | 
|  |  | 
|  | Expect.equals(size, maplet.length); | 
|  | Expect.equals('$i', maplet[i]); | 
|  | } | 
|  | } |