14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci/*
174514f5e3Sopenharmony_ci * @tc.name:builtinsgc
184514f5e3Sopenharmony_ci * @tc.desc:gc builtins sanity check
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci */
214514f5e3Sopenharmony_cilet freesize = ArkTools.GC.getFreeHeapSize();
224514f5e3Sopenharmony_ciif (freesize <= 0) {
234514f5e3Sopenharmony_ci    print("not positive free heap size");
244514f5e3Sopenharmony_ci}
254514f5e3Sopenharmony_ci
264514f5e3Sopenharmony_cilet maxsize = ArkTools.GC.getReservedHeapSize();
274514f5e3Sopenharmony_ciif (maxsize <= 0) {
284514f5e3Sopenharmony_ci    print("not positive max heap size");
294514f5e3Sopenharmony_ci}
304514f5e3Sopenharmony_ci
314514f5e3Sopenharmony_cilet usedsize = ArkTools.GC.getUsedHeapSize();
324514f5e3Sopenharmony_ciif (usedsize <= 0) {
334514f5e3Sopenharmony_ci    print("not positive used heap size");
344514f5e3Sopenharmony_ci}
354514f5e3Sopenharmony_ci
364514f5e3Sopenharmony_cilet myobj = new Object();
374514f5e3Sopenharmony_cilet addr = ArkTools.GC.getObjectAddress(myobj);
384514f5e3Sopenharmony_ciif (addr <= 0) {
394514f5e3Sopenharmony_ci    print("not positive object address");
404514f5e3Sopenharmony_ci}
414514f5e3Sopenharmony_ci
424514f5e3Sopenharmony_cilet spacetype = ArkTools.GC.getObjectSpaceType(myobj);
434514f5e3Sopenharmony_ciif (spacetype != 9 && spacetype != 12) {
444514f5e3Sopenharmony_ci    print("unexpected object space type");
454514f5e3Sopenharmony_ci}
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_citry {
484514f5e3Sopenharmony_ci    ArkTools.GC.registerNativeAllocation(-1);
494514f5e3Sopenharmony_ci    print("negative value exception is expected")
504514f5e3Sopenharmony_ci} catch (e) {
514514f5e3Sopenharmony_ci}
524514f5e3Sopenharmony_ci
534514f5e3Sopenharmony_citry {
544514f5e3Sopenharmony_ci    ArkTools.GC.registerNativeFree(-1);
554514f5e3Sopenharmony_ci    print("negative value exception is expected")
564514f5e3Sopenharmony_ci} catch (e) {
574514f5e3Sopenharmony_ci}
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_ciArkTools.GC.registerNativeFree(100);
604514f5e3Sopenharmony_ciArkTools.GC.registerNativeAllocation(20000);
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_cilet gcId = ArkTools.GC.startGC("old", function () {
634514f5e3Sopenharmony_ci    print("start concurrent mark");
644514f5e3Sopenharmony_ci}, false);
654514f5e3Sopenharmony_ciArkTools.GC.waitForFinishGC(gcId);
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_ciArkTools.GC.allocateArrayObject(10);
68