161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes/*
261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * Copyright (C) 2012 Google Inc.
361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes *
461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * you may not use this file except in compliance with the License.
661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * You may obtain a copy of the License at
761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes *
861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0
961e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes *
1061e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * Unless required by applicable law or agreed to in writing, software
1161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
1261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * See the License for the specific language governing permissions and
1461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes * limitations under the License.
1561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes */
1661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
1761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughespackage libcore.java.util;
1861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
1961e99b166906954cf2686381968a37a3ab32bde7Elliott Hughesimport java.io.Serializable;
2061e99b166906954cf2686381968a37a3ab32bde7Elliott Hughesimport java.util.AbstractCollection;
2161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughesimport java.util.concurrent.atomic.AtomicBoolean;
2261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughesimport java.util.concurrent.ConcurrentHashMap;
2361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughesimport junit.framework.TestCase;
2461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
2561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughespublic final class AbstractCollectionTest extends TestCase {
2661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes  // http://code.google.com/p/android/issues/detail?id=36519
2761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes  public void test_toArray() throws Exception {
2861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    final ConcurrentHashMap<Integer, Integer> m = new ConcurrentHashMap<Integer, Integer>();
2961e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    final AtomicBoolean finished = new AtomicBoolean(false);
3061e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
3161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    Thread reader = new Thread(new Runnable() {
3261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes      @Override public void run() {
3361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        while (!finished.get()) {
3461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes          m.values().toArray();
3561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes          m.values().toArray(new Integer[m.size()]);
3661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        }
3761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes      }
3861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    });
3961e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
4061e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    Thread mutator = new Thread(new Runnable() {
4161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes      @Override public void run() {
4261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        for (int i = 0; i < 100; ++i) {
4361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes          m.put(-i, -i);
4461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        }
4561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        for (int i = 0; i < 4096; ++i) {
4661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes          m.put(i, i);
4761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes          m.remove(i);
4861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        }
4961e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes        finished.set(true);
5061e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes      }
5161e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    });
5261e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes
5361e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    reader.start();
5461e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    mutator.start();
5561e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    reader.join();
5661e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes    mutator.join();
5761e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes  }
5861e99b166906954cf2686381968a37a3ab32bde7Elliott Hughes}
59