--- /dev/null 2018-04-03 12:55:20.301839954 +0200 +++ new/test/hotspot/gtest/gc/z/test_zLiveMap.cpp 2018-06-01 22:31:25.363812653 +0200 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#include "precompiled.hpp" +#include "gc/z/zLiveMap.inline.hpp" +#include "unittest.hpp" + +class ZLiveMapTest : public ::testing::Test { +protected: + static void strongly_live_for_large_zpage() { + // Large ZPages only have room for one object. + ZLiveMap livemap(1); + + bool inc_live; + uintptr_t object = 0u; + + // Mark the object strong. + livemap.set_atomic(object, false /* finalizable */, inc_live); + + // Check that both bits are in the same segment. + ASSERT_EQ(livemap.index_to_segment(0), livemap.index_to_segment(1)); + + // Check that the object was marked. + ASSERT_TRUE(livemap.get(0)); + + // Check that the object was strongly marked. + ASSERT_TRUE(livemap.get(1)); + + ASSERT_TRUE(inc_live); + } +}; + +TEST_F(ZLiveMapTest, strongly_live_for_large_zpage) { + strongly_live_for_large_zpage(); +}