1 2/* 3 * Copyright (c) 2025 Huawei Device Co., Ltd. 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import { launch } from "std/concurrency" 18 19type Test = () => void; 20 21let tests = new Array<Test>( 22 setTimeoutTest, 23 clearTimeoutTest, 24 clearIntervalTestFromCallback, 25 clearIntervalFromAnotherTimer, 26 clearTimeoutFromAnotherWorkerTest, 27 sameWorkerIdTest, 28); 29 30let zeroTimeout = 0; 31let shortTimeout = 10; 32let mediumTimeout = 100; 33let longTimeout = 1000; 34 35function setTimeoutTest() { 36 let flag = false; 37 let start = Date.now(); 38 setTimeout(() => { 39 arktest.assertTrue(flag); 40 arktest.assertTrue(Date.now() - start >= shortTimeout); 41 }, shortTimeout); 42 flag = true; 43} 44 45function firstTimerIdTest() { 46 let id = setTimeout(() => {}, 0); 47 arktest.assertTrue(id == 1); 48} 49 50function clearTimeoutTest() { 51 let id = setTimeout(() => { arktest.assertTrue(false); }, mediumTimeout); 52 clearTimeout(id); 53} 54 55function clearIntervalTestFromCallback() { 56 let flag = true; 57 let id: number = -1; 58 id = setInterval(() => { 59 arktest.assertTrue(flag); 60 flag = false; 61 arktest.assertTrue(id != -1); 62 clearInterval(id); 63 }, zeroTimeout); 64} 65 66function clearIntervalFromAnotherTimer() { 67 let flag = false; 68 let id = setInterval(() => { flag = true; }, shortTimeout); 69 setTimeout(() => { 70 arktest.assertTrue(flag); 71 clearInterval(id); 72 }, mediumTimeout); 73} 74 75function clearTimeoutFromAnotherWorkerTest() { 76 let id = setTimeout(() => { arktest.assertTrue(false); }, longTimeout); 77 launch<void, (i: number) => void>(clearTimeout, id); 78} 79 80function sameWorkerIdTest() { 81 let parentWorkerId = CoroutineExtras.getWorkerId(); 82 setTimeout(() => { arktest.assertTrue(CoroutineExtras.getWorkerId() == parentWorkerId) }, zeroTimeout); 83} 84 85function main() { 86 firstTimerIdTest(); 87 CoroutineExtras.setSchedulingPolicy(CoroutineExtras.POLICY_NON_MAIN); 88 for (let test of tests) { 89 test(); 90 } 91 for (let test of tests) { 92 launch<void, () => void>(test); 93 } 94} 95