Path: blob/master/test/hotspot/gtest/gc/z/test_zPhysicalMemory.cpp
41152 views
/*1* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223#include "precompiled.hpp"24#include "gc/z/zPhysicalMemory.inline.hpp"25#include "unittest.hpp"2627TEST(ZPhysicalMemoryTest, copy) {28const ZPhysicalMemorySegment seg0(0, 100, true);29const ZPhysicalMemorySegment seg1(200, 100, true);3031ZPhysicalMemory pmem0;32pmem0.add_segment(seg0);33EXPECT_EQ(pmem0.nsegments(), 1);34EXPECT_EQ(pmem0.segment(0).size(), 100u);3536ZPhysicalMemory pmem1;37pmem1.add_segment(seg0);38pmem1.add_segment(seg1);39EXPECT_EQ(pmem1.nsegments(), 2);40EXPECT_EQ(pmem1.segment(0).size(), 100u);41EXPECT_EQ(pmem1.segment(1).size(), 100u);4243ZPhysicalMemory pmem2(pmem0);44EXPECT_EQ(pmem2.nsegments(), 1);45EXPECT_EQ(pmem2.segment(0).size(), 100u);4647pmem2 = pmem1;48EXPECT_EQ(pmem2.nsegments(), 2);49EXPECT_EQ(pmem2.segment(0).size(), 100u);50EXPECT_EQ(pmem2.segment(1).size(), 100u);51}5253TEST(ZPhysicalMemoryTest, add) {54const ZPhysicalMemorySegment seg0(0, 1, true);55const ZPhysicalMemorySegment seg1(1, 1, true);56const ZPhysicalMemorySegment seg2(2, 1, true);57const ZPhysicalMemorySegment seg3(3, 1, true);58const ZPhysicalMemorySegment seg4(4, 1, true);59const ZPhysicalMemorySegment seg5(5, 1, true);60const ZPhysicalMemorySegment seg6(6, 1, true);6162ZPhysicalMemory pmem0;63EXPECT_EQ(pmem0.nsegments(), 0);64EXPECT_EQ(pmem0.is_null(), true);6566ZPhysicalMemory pmem1;67pmem1.add_segment(seg0);68pmem1.add_segment(seg1);69pmem1.add_segment(seg2);70pmem1.add_segment(seg3);71pmem1.add_segment(seg4);72pmem1.add_segment(seg5);73pmem1.add_segment(seg6);74EXPECT_EQ(pmem1.nsegments(), 1);75EXPECT_EQ(pmem1.segment(0).size(), 7u);76EXPECT_EQ(pmem1.is_null(), false);7778ZPhysicalMemory pmem2;79pmem2.add_segment(seg0);80pmem2.add_segment(seg1);81pmem2.add_segment(seg2);82pmem2.add_segment(seg4);83pmem2.add_segment(seg5);84pmem2.add_segment(seg6);85EXPECT_EQ(pmem2.nsegments(), 2);86EXPECT_EQ(pmem2.segment(0).size(), 3u);87EXPECT_EQ(pmem2.segment(1).size(), 3u);88EXPECT_EQ(pmem2.is_null(), false);8990ZPhysicalMemory pmem3;91pmem3.add_segment(seg0);92pmem3.add_segment(seg2);93pmem3.add_segment(seg3);94pmem3.add_segment(seg4);95pmem3.add_segment(seg6);96EXPECT_EQ(pmem3.nsegments(), 3);97EXPECT_EQ(pmem3.segment(0).size(), 1u);98EXPECT_EQ(pmem3.segment(1).size(), 3u);99EXPECT_EQ(pmem3.segment(2).size(), 1u);100EXPECT_EQ(pmem3.is_null(), false);101102ZPhysicalMemory pmem4;103pmem4.add_segment(seg0);104pmem4.add_segment(seg2);105pmem4.add_segment(seg4);106pmem4.add_segment(seg6);107EXPECT_EQ(pmem4.nsegments(), 4);108EXPECT_EQ(pmem4.segment(0).size(), 1u);109EXPECT_EQ(pmem4.segment(1).size(), 1u);110EXPECT_EQ(pmem4.segment(2).size(), 1u);111EXPECT_EQ(pmem4.segment(3).size(), 1u);112EXPECT_EQ(pmem4.is_null(), false);113}114115TEST(ZPhysicalMemoryTest, remove) {116ZPhysicalMemory pmem;117118pmem.add_segment(ZPhysicalMemorySegment(10, 10, true));119pmem.add_segment(ZPhysicalMemorySegment(30, 10, true));120pmem.add_segment(ZPhysicalMemorySegment(50, 10, true));121EXPECT_EQ(pmem.nsegments(), 3);122EXPECT_EQ(pmem.size(), 30u);123EXPECT_FALSE(pmem.is_null());124125pmem.remove_segments();126EXPECT_EQ(pmem.nsegments(), 0);127EXPECT_EQ(pmem.size(), 0u);128EXPECT_TRUE(pmem.is_null());129}130131TEST(ZPhysicalMemoryTest, split) {132ZPhysicalMemory pmem;133134pmem.add_segment(ZPhysicalMemorySegment(0, 10, true));135pmem.add_segment(ZPhysicalMemorySegment(10, 10, true));136pmem.add_segment(ZPhysicalMemorySegment(30, 10, true));137EXPECT_EQ(pmem.nsegments(), 2);138EXPECT_EQ(pmem.size(), 30u);139140ZPhysicalMemory pmem0 = pmem.split(1);141EXPECT_EQ(pmem0.nsegments(), 1);142EXPECT_EQ(pmem0.size(), 1u);143EXPECT_EQ(pmem.nsegments(), 2);144EXPECT_EQ(pmem.size(), 29u);145146ZPhysicalMemory pmem1 = pmem.split(25);147EXPECT_EQ(pmem1.nsegments(), 2);148EXPECT_EQ(pmem1.size(), 25u);149EXPECT_EQ(pmem.nsegments(), 1);150EXPECT_EQ(pmem.size(), 4u);151152ZPhysicalMemory pmem2 = pmem.split(4);153EXPECT_EQ(pmem2.nsegments(), 1);154EXPECT_EQ(pmem2.size(), 4u);155EXPECT_EQ(pmem.nsegments(), 0);156EXPECT_EQ(pmem.size(), 0u);157}158159TEST(ZPhysicalMemoryTest, split_committed) {160ZPhysicalMemory pmem0;161pmem0.add_segment(ZPhysicalMemorySegment(0, 10, true));162pmem0.add_segment(ZPhysicalMemorySegment(10, 10, false));163pmem0.add_segment(ZPhysicalMemorySegment(20, 10, true));164pmem0.add_segment(ZPhysicalMemorySegment(30, 10, false));165EXPECT_EQ(pmem0.nsegments(), 4);166EXPECT_EQ(pmem0.size(), 40u);167168ZPhysicalMemory pmem1 = pmem0.split_committed();169EXPECT_EQ(pmem0.nsegments(), 2);170EXPECT_EQ(pmem0.size(), 20u);171EXPECT_EQ(pmem1.nsegments(), 2);172EXPECT_EQ(pmem1.size(), 20u);173}174175176