* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
* @tc.name:container
* @tc.desc:test container
* @tc.type: FUNC
* @tc.require: issueI5NO8G
*/
var LinkedList = undefined;
if (globalThis["ArkPrivate"] != undefined) {
LinkedList = ArkPrivate.Load(ArkPrivate.LinkedList);
let list = new LinkedList();
let testArray = [];
let map = new Map();
for(let i = 0; i<10; i++) {
list.add(i);
testArray.push(i);
}
map.set("test linkedlist has:", list.has(8));
map.set("test linkedlist not has:", list.has(2));
map.set("test linkedlist getLastIndexOf:", list.getLastIndexOf(1) === 1);
map.set("test linkedlist getIndexOf:", list.getIndexOf(5) === 5);
list.removeByIndex(9);
testArray.splice(9, 1);
let res = true;
for(let i = 0; i < testArray.length; i++) {
if (list[i] !== testArray[i]) {
res = false;
}
}
map.set("test linkedlist removeByIndex:", res);
const removeRes = list.remove(8);
testArray.splice(8, 1);
res = true;
for(let i = 0; i < testArray.length; i++) {
if (list[i] !== testArray[i]) {
res = false;
}
}
map.set("test linkedlist remove:", res);
map.set("test linkedlist remove1:", removeRes);
map.set("test linkedlist getFirst:", list.getFirst() === 0);
map.set("test linkedlist getLast:", list.getLast() === 7);
list.insert(3, 999);
testArray.splice(3, 0, 999);
res = true;
for(let i = 0; i < testArray.length; i++) {
if (list[i] !== testArray[i]) {
res = false;
}
}
map.set("test linkedlist insert:", res);
list.set(5, 888);
testArray[5] = 888;
res = true;
for(let i = 0; i < testArray.length; i++) {
if (list[i] !== testArray[i]) {
res = false;
}
}
map.set("test linkedlist set:", res);
let cloneList = list.clone();
res = true;
if (list.length !== cloneList.length) {
res = false;
}
for(let i = 0; i < cloneList.length; i++) {
if (list[i] !== cloneList[i]) {
res = false;
}
}
map.set("test linkedlist clone:", res);
list.addFirst(1111);
map.set("test linkedlist addfirst:", list.getFirst() === 1111);
const removefirstres = list.removeFirst();
map.set("test linkedlist removeFirst:", removefirstres === 1111);
res = true;
let i = 0;
for (const data of list) {
if (data !== testArray[i]) {
res = false;
}
i++;
}
map.set("test linkedlist intertor:", res);
let list1 = new LinkedList();
let testArray1 = [];
for (let i = 0; i < 10; i++) {
list1.add(i);
testArray1.push(i);
}
res = true;
list1.forEach((i, d) => {
if (d !== testArray1[i]) {
res = false;
}
})
map.set("test linkedlist forEach:", res);
list1.clear();
map.set("test linkedlist clear:", list1.length === 0);
for (let i = 0; i < 10; i++) {
list1.add(i);
}
res = true
list1.forEach((i, d) => {
if (d !== testArray1[i]) {
res = false;
}
})
map.set("test linkedlist clear and add:", res)
map.set("test linkedlist get:", list.get(1232) === undefined)
map.set("test linkedlist getLastIndexOf:", list.getLastIndexOf('abc') === -1)
let flag = false;
try {
list.removeByIndex(99)
} catch (error) {
flag = true;
}
map.set("test linkedlist removeByIndex:", flag);
testArray.splice(5, 1);
res = true;
const arr = list.convertToArray()
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== testArray[i]) {
res = false;
}
}
map.set("test linkedlist convertToArray:", res)
let list2 = new LinkedList();
let proxy = new Proxy(list2, {});
let testArray2 = [];
for(let i = 0; i<10; i++) {
proxy.add(i);
testArray2.push(i);
}
map.set("test linkedlist has:", proxy.has(8));
map.set("test linkedlist not has:", proxy.has(2));
map.set("test linkedlist getLastIndexOf:", proxy.getLastIndexOf(1) === 1);
map.set("test linkedlist getIndexOf:", proxy.getIndexOf(5) === 5);
proxy.removeByIndex(9);
testArray2.splice(9, 1);
res = true;
for(let i = 0; i < testArray2.length; i++) {
if (proxy[i] !== testArray2[i]) {
res = false;
}
}
map.set("test linkedlist removeByIndex:", res);
const removeRes1 = proxy.remove(8);
testArray2.splice(8, 1);
res = true;
for(let i = 0; i < testArray2.length; i++) {
if (proxy[i] !== testArray2[i]) {
res = false;
}
}
map.set("test linkedlist remove:", res);
map.set("test linkedlist remove1:", removeRes1);
map.set("test linkedlist getFirst:", proxy.getFirst() === 0);
map.set("test linkedlist getLast:", proxy.getLast() === 7);
proxy.insert(3, 999);
testArray2.splice(3, 0, 999);
res = true;
for(let i = 0; i < testArray2.length; i++) {
if (proxy[i] !== testArray2[i]) {
res = false;
}
}
map.set("test linkedlist insert:", res);
proxy.set(5, 888);
testArray2[5] = 888;
res = true;
for(let i = 0; i < testArray2.length; i++) {
if (proxy[i] !== testArray2[i]) {
res = false;
}
}
map.set("test linkedlist set:", res);
let cloneList2 = proxy.clone();
res = true;
if (proxy.length !== cloneList2.length) {
res = false;
}
for(let i = 0; i < cloneList.length; i++) {
if (proxy[i] !== cloneList2[i]) {
res = false;
}
}
map.set("test linkedlist clone:", res);
proxy.addFirst(1111);
map.set("test linkedlist addfirst:", proxy.getFirst() === 1111);
const removefirstres1 = proxy.removeFirst();
map.set("test linkedlist removeFirst:", removefirstres1 === 1111);
let removeList = new LinkedList();
let removeProxy = new Proxy(removeList, {});
for(let i = 0; i < 10; i++) {
removeProxy.add(i);
}
for(let i = 9; i >= 0; i--) {
removeProxy.add(i);
}
let removeResult = removeProxy.removeFirstFound(2);
res = true;
if (removeResult !== true || removeProxy.getIndexOf(2) !== 16) {
res = false;
}
map.set("test linkedlist removeFirstFound:", res);
removeResult = removeProxy.removeLast();
res = true;
if (removeResult !== 0 || removeProxy.getLastIndexOf(0) !== 0) {
res = false;
}
map.set("test linkedlist removeLast:", res);
removeResult = removeProxy.removeLastFound(3);
res = true;
if (removeResult !== true || removeProxy.getIndexOf(3) !== 2) {
res = false;
}
map.set("test linkedlist removeLastFound:", res);
res = true;
let j = 0;
for (const data of proxy) {
if (data !== testArray2[j]) {
res = false;
}
j++;
}
let itr = proxy[Symbol.iterator]();
let tmp = undefined;
let arr3 = [];
do {
tmp = itr.next().value;
arr3.push(tmp);
} while (tmp != undefined);
for (let k = 0; k < proxy.length; k++) {
if (arr3[k] !== testArray2[k]) {
res = false;
}
}
map.set("test linkedlist intertor:", res)
let list3 = new LinkedList();
let proxy1 = new Proxy(list3, {});
let testArray3 = [];
for (let i = 0; i < 10; i++) {
proxy1.add(i);
testArray3.push(i);
}
res = true
proxy1.forEach((i, d) => {
if (d !== testArray3[i]) {
res = false;
}
})
map.set("test linkedlist forEach:", res);
proxy1.clear();
map.set("test linkedlist clear:", proxy1.length === 0);
map.set("test linkedlist get:", proxy1.get(1232) === undefined);
map.set("test linkedlist getLastIndexOf:", proxy1.getLastIndexOf('abc') === -1);
flag = false;
try {
proxy1.removeByIndex(99);
} catch (error) {
flag = true;
}
map.set("test linkedlist removeByIndex:", flag);
let empty_ll = new LinkedList();
try {
empty_ll.set(0, 1);
} catch(err) {
res = (err =="BusinessError: Container is empty")
map.set("test Set exception when arraylist is empty:", res)
}
try {
empty_ll.removeByIndex(0);
} catch(err) {
res = (err =="BusinessError: Container is empty")
map.set("test removeByIndex exception when arraylist is empty:", res)
}
testArray3.splice(5, 1);
res = true;
const arr1 = proxy1.convertToArray()
for (let i = 1; i < arr1.length; i++) {
if (arr1[i] !== testArray3[i]) {
res = false
}
}
map.set("test linkedlist convertToArray:", res)
try {
let myLinkedList = new LinkedList();
myLinkedList.add(1);
myLinkedList[2147483648];
} catch(err) {
let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer.");
map.set("test LinkedList[i] overFlowTest:", overFlowTest);
}
flag = undefined;
function elementsLinkedList(valueLinkedList, keyLinkedList, map) {
if (!valueLinkedList) {
if (!flag) {
flag = [];
}
flag.push(keyLinkedList);
}
}
map.forEach(elementsLinkedList);
let de = new LinkedList();
try {
de.forEach(123);
} catch(err) {
if (err.name != "BusinessError") {
print("LinkedList forEach throw error fail");
}
}
if (!flag) {
print("Test LinkedList success!!!");
} else {
print("Test LinkedList fail: " + flag);
}
const v6 = new LinkedList()
function f2(a3) {
return a3
}
const o5 = {
"get" : f2,
}
const v7 = new Proxy(v6, o5)
try {
v7[1073741823]
} catch (error) {
print(error)
}
let mList = new LinkedList();
for (let i = 1; i <= 10; ++i) {
mList.add(i);
}
for (let i = 1; i <= 10; ++i) {
mList.remove(i);
}
for (let i = 1; i <= 3; ++i) {
mList.add(i);
}
let myList1 = new LinkedList();
myList1.add(1);
myList1.add(2);
myList1.add(3);
myList1.insert(Math.floor(1.5), 999);
myList1.get(Math.floor(1.5));
myList1.set(Math.floor(1.5), 888);
myList1.removeByIndex(Math.floor(1.5));
if (mList.getLast() != 3 ||
("convertToArray = " + mList.convertToArray()) != "convertToArray = 1,2,3") {
print("Test LinkedList fail!!!");
}
const v1 = new LinkedList();
v1[2147483648] = v1;
print(v1.length);
* @tc.name: checkcontainerloadhclass
* @tc.desc: Test ContainersLinkedListStubBuilder::ForEach whether judge isHeapObject
* before loading hClass.
* @tc.type: FUNC
* @tc.require: issueIBQ709
*/
{
let v1 = new LinkedList(0);
let arr1 = [1];
try {
Reflect.apply(v1.forEach, 123, arr1);
} catch (e) {
print(e);
}
}
}
export let linked_listRes = "Test LinkedList done";