test/hotspot/gtest/gc/shared/test_ptrQueueBufferAllocator.cpp
author simonis
Tue, 20 Nov 2018 19:06:34 +0100
changeset 52624 bbdebc744bf3
parent 52582 6df094be7f58
child 53404 9ff1e6cacac3
permissions -rw-r--r--
8214125: [test] Fix comparison between pointer and integer in test_ptrQueueBufferAllocator.cpp Reviewed-by: mdoerr, shade, stuefe, tschatzl
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52582
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     1
/*
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     4
 *
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     7
 * published by the Free Software Foundation.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     8
 *
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    13
 * accompanied this code).
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    14
 *
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    18
 *
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    21
 * questions.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    22
 *
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    23
 */
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    24
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    25
#include "precompiled.hpp"
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    26
#include "gc/shared/ptrQueue.hpp"
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    27
#include "runtime/mutex.hpp"
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    28
#include "unittest.hpp"
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    29
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    30
// Some basic testing of BufferNode::Allocator.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    31
TEST_VM(PtrQueueBufferAllocatorTest, test) {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    32
  Mutex m(Mutex::leaf, "PtrQueueBufferAllocatorTest",
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    33
          false, Mutex::_safepoint_check_never);
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    34
  BufferNode::Allocator allocator(256, &m);
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    35
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    36
  // Allocate some new nodes for use in testing.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    37
  BufferNode* nodes[10] = {};
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    38
  const size_t node_count = ARRAY_SIZE(nodes);
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    39
  for (size_t i = 0; i < node_count; ++i) {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    40
    ASSERT_EQ(0u, allocator.free_count());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    41
    nodes[i] = allocator.allocate();
52624
bbdebc744bf3 8214125: [test] Fix comparison between pointer and integer in test_ptrQueueBufferAllocator.cpp
simonis
parents: 52582
diff changeset
    42
    ASSERT_EQ((BufferNode*)NULL, nodes[i]->next());
52582
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    43
  }
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    44
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    45
  // Release the nodes, adding them to the allocator's free list.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    46
  for (size_t i = 0; i < node_count; ++i) {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    47
    ASSERT_EQ(i, allocator.free_count());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    48
    allocator.release(nodes[i]);
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    49
    if (i == 0) {
52624
bbdebc744bf3 8214125: [test] Fix comparison between pointer and integer in test_ptrQueueBufferAllocator.cpp
simonis
parents: 52582
diff changeset
    50
      ASSERT_EQ((BufferNode*)NULL, nodes[i]->next());
52582
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    51
    } else {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    52
      ASSERT_EQ(nodes[i - 1], nodes[i]->next());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    53
    }
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    54
  }
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    55
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    56
  // Allocate nodes from the free list.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    57
  for (size_t i = 0; i < node_count; ++i) {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    58
    size_t j = node_count - i;
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    59
    ASSERT_EQ(j, allocator.free_count());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    60
    ASSERT_EQ(nodes[j - 1], allocator.allocate());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    61
  }
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    62
  ASSERT_EQ(0u, allocator.free_count());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    63
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    64
  // Release nodes back to the free list.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    65
  for (size_t i = 0; i < node_count; ++i) {
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    66
    allocator.release(nodes[i]);
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    67
  }
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    68
  ASSERT_EQ(node_count, allocator.free_count());
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    69
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    70
  // Destroy some nodes in the free list.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    71
  // We don't have a way to verify destruction, but we can at
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    72
  // leat verify we don't crash along the way.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    73
  allocator.reduce_free_list();
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    74
  // destroy allocator.
6df094be7f58 8213352: Separate BufferNode allocation from PtrQueueSet
kbarrett
parents:
diff changeset
    75
}