14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 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:primitiveic
184514f5e3Sopenharmony_ci * @tc.desc:test primitiveic
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci */
214514f5e3Sopenharmony_ci
224514f5e3Sopenharmony_ci// for number_ic
234514f5e3Sopenharmony_ciconst numObj1 = 10928;
244514f5e3Sopenharmony_ciconst numObj2 = 123.456;
254514f5e3Sopenharmony_ciconst numObj3 = new Number(42);
264514f5e3Sopenharmony_cifor (let i = 0; i < 100; i++) {
274514f5e3Sopenharmony_ci   let res1 = numObj1.toString();
284514f5e3Sopenharmony_ci   let res2 = numObj2.toPrecision(4);
294514f5e3Sopenharmony_ci   let res3 = numObj3.valueOf();
304514f5e3Sopenharmony_ci}
314514f5e3Sopenharmony_ci
324514f5e3Sopenharmony_ci// for number_ic & string_ic hasAccessor
334514f5e3Sopenharmony_ci{
344514f5e3Sopenharmony_ci  function foo() { return -4096;}
354514f5e3Sopenharmony_ci  Object.defineProperty(String.prototype, "a", {get:foo});
364514f5e3Sopenharmony_ci  Object.defineProperty(Number.prototype, "b", {get:foo});
374514f5e3Sopenharmony_ci  for (let i = 0; i < 50; i++)
384514f5e3Sopenharmony_ci  {
394514f5e3Sopenharmony_ci      const num = 123456;
404514f5e3Sopenharmony_ci      const str = "normallize";
414514f5e3Sopenharmony_ci      num.a;
424514f5e3Sopenharmony_ci      str.b;
434514f5e3Sopenharmony_ci  }
444514f5e3Sopenharmony_ci  Object.defineProperty(Number.prototype, "c", {value:"123"});
454514f5e3Sopenharmony_ci  for (let i = 0; i < 50; i++)
464514f5e3Sopenharmony_ci  {
474514f5e3Sopenharmony_ci      const num = 123456;
484514f5e3Sopenharmony_ci      const str = "normallize";
494514f5e3Sopenharmony_ci      num.a;
504514f5e3Sopenharmony_ci      str.b;
514514f5e3Sopenharmony_ci  }
524514f5e3Sopenharmony_ci}
534514f5e3Sopenharmony_ci
544514f5e3Sopenharmony_ci// for number_ic & string_ic notHasAccessor
554514f5e3Sopenharmony_ci{
564514f5e3Sopenharmony_ci  Object.defineProperty(String.prototype, "d", {value:"456"});
574514f5e3Sopenharmony_ci  Object.defineProperty(Number.prototype, "e", {value:"789"});
584514f5e3Sopenharmony_ci  for (let i = 0; i < 50; i++)
594514f5e3Sopenharmony_ci  {
604514f5e3Sopenharmony_ci      const num = 123456;
614514f5e3Sopenharmony_ci      const str = "normallize";
624514f5e3Sopenharmony_ci      num.d;
634514f5e3Sopenharmony_ci      str.e;
644514f5e3Sopenharmony_ci  }
654514f5e3Sopenharmony_ci}
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_ciprint("primitiveic load success")
684514f5e3Sopenharmony_ci
694514f5e3Sopenharmony_cifor(let i=0;i<2;i++){
704514f5e3Sopenharmony_ci  let obj={};
714514f5e3Sopenharmony_ci  let x=obj.__proto__;
724514f5e3Sopenharmony_ci  Object.freeze(x);
734514f5e3Sopenharmony_ci}
744514f5e3Sopenharmony_ciprint("load ic by name test2 success!")
754514f5e3Sopenharmony_ci
764514f5e3Sopenharmony_cifunction f(a, b) {
774514f5e3Sopenharmony_ci  a.name;
784514f5e3Sopenharmony_ci}
794514f5e3Sopenharmony_ci
804514f5e3Sopenharmony_cifor (let i = 0; i < 100; i++) {
814514f5e3Sopenharmony_ci  f(Number, 1);
824514f5e3Sopenharmony_ci  f(120, 1);
834514f5e3Sopenharmony_ci  f(Number, 1);
844514f5e3Sopenharmony_ci}
854514f5e3Sopenharmony_ciprint("load Number ic by name success!")
864514f5e3Sopenharmony_ci
874514f5e3Sopenharmony_cifunction f(a, b) {
884514f5e3Sopenharmony_ci  a.valueOf();
894514f5e3Sopenharmony_ci}
904514f5e3Sopenharmony_ci
914514f5e3Sopenharmony_cifor (let i = 0; i < 100; i++) {
924514f5e3Sopenharmony_ci  f(Number.prototype, 1);
934514f5e3Sopenharmony_ci}
944514f5e3Sopenharmony_cifor (let i = 0; i < 100; i++) {
954514f5e3Sopenharmony_ci  f(120, 1);
964514f5e3Sopenharmony_ci}
974514f5e3Sopenharmony_ciprint("load Number ic by name success1!")
984514f5e3Sopenharmony_ci
994514f5e3Sopenharmony_ciprint('================Test proto SendableTypedArray IC================');
1004514f5e3Sopenharmony_cifunction testProtoIc(ctor) {
1014514f5e3Sopenharmony_ci  for (let i = 0; i < 100; i++) { };
1024514f5e3Sopenharmony_ci  let obj = new ctor(100);
1034514f5e3Sopenharmony_ci  try {
1044514f5e3Sopenharmony_ci    let obj1 = {
1054514f5e3Sopenharmony_ci      __proto__: obj,
1064514f5e3Sopenharmony_ci    };
1074514f5e3Sopenharmony_ci    let obj2 = {
1084514f5e3Sopenharmony_ci      __proto__: obj1,
1094514f5e3Sopenharmony_ci    };
1104514f5e3Sopenharmony_ci    let obj3 = {
1114514f5e3Sopenharmony_ci      __proto__: obj2,
1124514f5e3Sopenharmony_ci    };
1134514f5e3Sopenharmony_ci    print(ctor.name, 'set proto with sendable object success.');
1144514f5e3Sopenharmony_ci  } catch (err) {
1154514f5e3Sopenharmony_ci    print(ctor.name, 'set proto with sendable object failed. err: ' + err);
1164514f5e3Sopenharmony_ci  }
1174514f5e3Sopenharmony_ci}
1184514f5e3Sopenharmony_ci
1194514f5e3Sopenharmony_ci[
1204514f5e3Sopenharmony_ci  SendableFloat64Array,
1214514f5e3Sopenharmony_ci  SendableFloat32Array,
1224514f5e3Sopenharmony_ci  SendableInt32Array,
1234514f5e3Sopenharmony_ci  SendableInt16Array,
1244514f5e3Sopenharmony_ci  SendableInt8Array,
1254514f5e3Sopenharmony_ci  SendableUint32Array,
1264514f5e3Sopenharmony_ci  SendableUint16Array,
1274514f5e3Sopenharmony_ci  SendableUint8Array,
1284514f5e3Sopenharmony_ci  SendableUint8ClampedArray,
1294514f5e3Sopenharmony_ci].forEach((ctor) => {
1304514f5e3Sopenharmony_ci  testProtoIc(ctor);
1314514f5e3Sopenharmony_ci});
1324514f5e3Sopenharmony_ciprint('================Test proto SendableTypedArray IC success!================');
1334514f5e3Sopenharmony_cifunction f(){return 1};
1344514f5e3Sopenharmony_ciObject.defineProperty(this,"g",{
1354514f5e3Sopenharmony_ci    get:f,
1364514f5e3Sopenharmony_ci    set:f,
1374514f5e3Sopenharmony_ci})
1384514f5e3Sopenharmony_cifor(let i=0;i<2;i++){
1394514f5e3Sopenharmony_ci    print(g)
1404514f5e3Sopenharmony_ci}
1414514f5e3Sopenharmony_ciprint("load global ic with accessor success!");
1424514f5e3Sopenharmony_ci
1434514f5e3Sopenharmony_cifunction func1(o, v) {
1444514f5e3Sopenharmony_ci  let  res;
1454514f5e3Sopenharmony_ci  for (let i = 0; i < 100; i++) {
1464514f5e3Sopenharmony_ci      res=o.x;
1474514f5e3Sopenharmony_ci      if (res != v) {
1484514f5e3Sopenharmony_ci          print("Error");
1494514f5e3Sopenharmony_ci      }
1504514f5e3Sopenharmony_ci  }
1514514f5e3Sopenharmony_ci  return res;
1524514f5e3Sopenharmony_ci}
1534514f5e3Sopenharmony_ci{
1544514f5e3Sopenharmony_ci  let pro = {
1554514f5e3Sopenharmony_ci      get x() {
1564514f5e3Sopenharmony_ci          return 1;
1574514f5e3Sopenharmony_ci      }
1584514f5e3Sopenharmony_ci  }
1594514f5e3Sopenharmony_ci  let o = {
1604514f5e3Sopenharmony_ci      __proto__: pro
1614514f5e3Sopenharmony_ci  };
1624514f5e3Sopenharmony_ci  o[102500] = 1;
1634514f5e3Sopenharmony_ci  o["test"] = "test";
1644514f5e3Sopenharmony_ci  print(func1(o, 1));
1654514f5e3Sopenharmony_ci  Object.defineProperty(o, "x", { value: 2 });
1664514f5e3Sopenharmony_ci  print("change")
1674514f5e3Sopenharmony_ci  print(func1(o, 2));
1684514f5e3Sopenharmony_ci}
1694514f5e3Sopenharmony_ci
1704514f5e3Sopenharmony_ci{
1714514f5e3Sopenharmony_ci  let pro = {
1724514f5e3Sopenharmony_ci      get x() {
1734514f5e3Sopenharmony_ci          return 1;
1744514f5e3Sopenharmony_ci      }
1754514f5e3Sopenharmony_ci  }
1764514f5e3Sopenharmony_ci  let pro2 = {
1774514f5e3Sopenharmony_ci      __proto__: pro
1784514f5e3Sopenharmony_ci  };
1794514f5e3Sopenharmony_ci  let o = {
1804514f5e3Sopenharmony_ci      __proto__: pro2
1814514f5e3Sopenharmony_ci  };
1824514f5e3Sopenharmony_ci  pro2[102500] = 1;
1834514f5e3Sopenharmony_ci  pro2["test"] = "test";
1844514f5e3Sopenharmony_ci  print(func1(o, 1));
1854514f5e3Sopenharmony_ci  Object.defineProperty(pro2, "x", { value: 2 });
1864514f5e3Sopenharmony_ci  print("change")
1874514f5e3Sopenharmony_ci  func1(o, 2);
1884514f5e3Sopenharmony_ci}
1894514f5e3Sopenharmony_ci
1904514f5e3Sopenharmony_ci{
1914514f5e3Sopenharmony_ci  function getNumber(o) {
1924514f5e3Sopenharmony_ci      let res;
1934514f5e3Sopenharmony_ci      for (let i = 0; i < 100; i++) {
1944514f5e3Sopenharmony_ci        res=o.Number;
1954514f5e3Sopenharmony_ci      }
1964514f5e3Sopenharmony_ci      return res;
1974514f5e3Sopenharmony_ci  }
1984514f5e3Sopenharmony_ci  let pro = globalThis
1994514f5e3Sopenharmony_ci  let pro2 = {
2004514f5e3Sopenharmony_ci      __proto__: pro
2014514f5e3Sopenharmony_ci  };
2024514f5e3Sopenharmony_ci  let o = {
2034514f5e3Sopenharmony_ci      __proto__: pro2
2044514f5e3Sopenharmony_ci  };
2054514f5e3Sopenharmony_ci  pro2[102500] = 1;
2064514f5e3Sopenharmony_ci  pro2["test"] = "test";
2074514f5e3Sopenharmony_ci  for (let i = 0; i < 2; i++) {
2084514f5e3Sopenharmony_ci      print(getNumber(o))
2094514f5e3Sopenharmony_ci  }
2104514f5e3Sopenharmony_ci  Object.defineProperty(o, "Number", { value: 2 });
2114514f5e3Sopenharmony_ci  print("change")
2124514f5e3Sopenharmony_ci  for (let i = 0; i < 2; i++) {
2134514f5e3Sopenharmony_ci      print(getNumber(o))
2144514f5e3Sopenharmony_ci  }
2154514f5e3Sopenharmony_ci}
216