13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_cifunction test_signed_right_shift_int(): void 173af6ab5fSopenharmony_ci{ 183af6ab5fSopenharmony_ci let tests: int[][] = [ 193af6ab5fSopenharmony_ci [0x7FFFFFFF, 0, 0x7FFFFFFF], 203af6ab5fSopenharmony_ci [0x7FFFFFFF, 32, 0x7FFFFFFF], 213af6ab5fSopenharmony_ci [0x7FFFFFFF, -32, 0x7FFFFFFF], 223af6ab5fSopenharmony_ci [0x7FFFFFFF, 1, 0x3FFFFFFF], 233af6ab5fSopenharmony_ci [0x7FFFFFFF, 33, 0x3FFFFFFF], 243af6ab5fSopenharmony_ci [0x7FFFFFFF, 30, 1], 253af6ab5fSopenharmony_ci [0x7FFFFFFF, 62, 1], 263af6ab5fSopenharmony_ci [0x7FFFFFFF, 31, 0], 273af6ab5fSopenharmony_ci [0x7FFFFFFF, 63, 0], 283af6ab5fSopenharmony_ci [0x7FFFFFFF, -1, 0], 293af6ab5fSopenharmony_ci [-1, 0, -1], 303af6ab5fSopenharmony_ci [-1, 1, -1], 313af6ab5fSopenharmony_ci [-1, 31, -1], 323af6ab5fSopenharmony_ci [-4, 0, -4], 333af6ab5fSopenharmony_ci [-4, 1, -2], 343af6ab5fSopenharmony_ci [-4, 31, -1], 353af6ab5fSopenharmony_ci ]; 363af6ab5fSopenharmony_ci 373af6ab5fSopenharmony_ci // runtime tests 383af6ab5fSopenharmony_ci for (let i: int = 0; i<tests.length; i++) 393af6ab5fSopenharmony_ci { 403af6ab5fSopenharmony_ci assert (tests[i][0] >> tests[i][1] == tests[i][2]) 413af6ab5fSopenharmony_ci } 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_ci // compile time tests 443af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 0 == 0x7FFFFFFF); 453af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 32 == 0x7FFFFFFF); 463af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> -32 == 0x7FFFFFFF); 473af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 1 == 0x3FFFFFFF); 483af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 33 == 0x3FFFFFFF); 493af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 30 == 1); 503af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 62 == 1); 513af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 31 == 0); 523af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> 63 == 0); 533af6ab5fSopenharmony_ci assert(0x7FFFFFFF >> -1 == 0); 543af6ab5fSopenharmony_ci assert(-1 >> 0 == -1); 553af6ab5fSopenharmony_ci assert(-1 >> 1 == -1); 563af6ab5fSopenharmony_ci assert(-1 >> 31 == -1); 573af6ab5fSopenharmony_ci assert(-4 >> 0 == -4); 583af6ab5fSopenharmony_ci assert(-4 >> 1 == -2); 593af6ab5fSopenharmony_ci assert(-4 >> 31 == -1); 603af6ab5fSopenharmony_ci} 613af6ab5fSopenharmony_ci 623af6ab5fSopenharmony_cifunction test_signed_right_shift_long(): void 633af6ab5fSopenharmony_ci{ 643af6ab5fSopenharmony_ci let tests: long[][] = [ 653af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 0, 0x7FFFFFFFFFFFFFFF], 663af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 64, 0x7FFFFFFFFFFFFFFF], 673af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, -64, 0x7FFFFFFFFFFFFFFF], 683af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 1, 0x3FFFFFFFFFFFFFFF], 693af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 65, 0x3FFFFFFFFFFFFFFF], 703af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 62, 1], 713af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 126, 1], 723af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 63, 0], 733af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, 127, 0], 743af6ab5fSopenharmony_ci [0x7FFFFFFFFFFFFFFF, -1, 0], 753af6ab5fSopenharmony_ci [-1, 0, -1], 763af6ab5fSopenharmony_ci [-1, 1, -1], 773af6ab5fSopenharmony_ci [-1, 63, -1], 783af6ab5fSopenharmony_ci [-4, 0, -4], 793af6ab5fSopenharmony_ci [-4, 1, -2], 803af6ab5fSopenharmony_ci [-4, 63, -1], 813af6ab5fSopenharmony_ci ]; 823af6ab5fSopenharmony_ci 833af6ab5fSopenharmony_ci // runtime tests 843af6ab5fSopenharmony_ci for (let i: int = 0; i<tests.length; i++) 853af6ab5fSopenharmony_ci { 863af6ab5fSopenharmony_ci assert (tests[i][0] >> tests[i][1] == tests[i][2]) 873af6ab5fSopenharmony_ci } 883af6ab5fSopenharmony_ci 893af6ab5fSopenharmony_ci // compile time tests 903af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 0 == 0x7FFFFFFFFFFFFFFF); 913af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 64 == 0x7FFFFFFFFFFFFFFF); 923af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> -64 == 0x7FFFFFFFFFFFFFFF); 933af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 1 == 0x3FFFFFFFFFFFFFFF); 943af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 65 == 0x3FFFFFFFFFFFFFFF); 953af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 62 == 1); 963af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 126 == 1); 973af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 63 == 0); 983af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> 127 == 0); 993af6ab5fSopenharmony_ci assert(0x7FFFFFFFFFFFFFFF >> -1 == 0); 1003af6ab5fSopenharmony_ci assert(-1 >> 0 == -1); 1013af6ab5fSopenharmony_ci assert(-1 >> 1 == -1); 1023af6ab5fSopenharmony_ci assert(-1 >> 63 == -1); 1033af6ab5fSopenharmony_ci assert(-4 >> 0 == -4); 1043af6ab5fSopenharmony_ci assert(-4 >> 1 == -2); 1053af6ab5fSopenharmony_ci assert(-4 >> 63 == -1); 1063af6ab5fSopenharmony_ci} 1073af6ab5fSopenharmony_ci 1083af6ab5fSopenharmony_ci 1093af6ab5fSopenharmony_cifunction main(): void 1103af6ab5fSopenharmony_ci{ 1113af6ab5fSopenharmony_ci test_signed_right_shift_int(); 1123af6ab5fSopenharmony_ci test_signed_right_shift_long(); 1133af6ab5fSopenharmony_ci} 114