• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16function test_signed_right_shift_int(): void
17{
18    let tests: int[][] = [
19                          [0x7FFFFFFF,   0, 0x7FFFFFFF],
20                          [0x7FFFFFFF,  32, 0x7FFFFFFF],
21                          [0x7FFFFFFF, -32, 0x7FFFFFFF],
22                          [0x7FFFFFFF,   1, 0x3FFFFFFF],
23                          [0x7FFFFFFF,  33, 0x3FFFFFFF],
24                          [0x7FFFFFFF,  30, 1],
25                          [0x7FFFFFFF,  62, 1],
26                          [0x7FFFFFFF,  31, 0],
27                          [0x7FFFFFFF,  63, 0],
28                          [0x7FFFFFFF,  -1, 0],
29                          [-1,  0, -1],
30                          [-1,  1, -1],
31                          [-1, 31, -1],
32                          [-4,  0, -4],
33                          [-4,  1, -2],
34                          [-4, 31, -1],
35                         ];
36
37    // runtime tests
38    for (let i: int = 0; i<tests.length; i++)
39    {
40        assertEQ(tests[i][0] >> tests[i][1], tests[i][2])
41    }
42
43    // compile time tests
44    assertEQ(0x7FFFFFFF >>   0, 0x7FFFFFFF)
45    assertEQ(0x7FFFFFFF >>  32, 0x7FFFFFFF)
46    assertEQ(0x7FFFFFFF >> -32, 0x7FFFFFFF)
47    assertEQ(0x7FFFFFFF >>   1, 0x3FFFFFFF)
48    assertEQ(0x7FFFFFFF >>  33, 0x3FFFFFFF)
49    assertEQ(0x7FFFFFFF >>  30, 1)
50    assertEQ(0x7FFFFFFF >>  62, 1)
51    assertEQ(0x7FFFFFFF >>  31, 0)
52    assertEQ(0x7FFFFFFF >>  63, 0)
53    assertEQ(0x7FFFFFFF >>  -1, 0)
54    assertEQ(-1 >>  0, -1)
55    assertEQ(-1 >>  1, -1)
56    assertEQ(-1 >> 31, -1)
57    assertEQ(-4 >>  0, -4)
58    assertEQ(-4 >>  1, -2)
59    assertEQ(-4 >> 31, -1)
60}
61
62function test_signed_right_shift_long(): void
63{
64    let tests: long[][] = [
65                          [0x7FFFFFFFFFFFFFFF,    0, 0x7FFFFFFFFFFFFFFF],
66                          [0x7FFFFFFFFFFFFFFF,   64, 0x7FFFFFFFFFFFFFFF],
67                          [0x7FFFFFFFFFFFFFFF,  -64, 0x7FFFFFFFFFFFFFFF],
68                          [0x7FFFFFFFFFFFFFFF,    1, 0x3FFFFFFFFFFFFFFF],
69                          [0x7FFFFFFFFFFFFFFF,   65, 0x3FFFFFFFFFFFFFFF],
70                          [0x7FFFFFFFFFFFFFFF,   62, 1],
71                          [0x7FFFFFFFFFFFFFFF,  126, 1],
72                          [0x7FFFFFFFFFFFFFFF,   63, 0],
73                          [0x7FFFFFFFFFFFFFFF,  127, 0],
74                          [0x7FFFFFFFFFFFFFFF,   -1, 0],
75                          [-1,  0, -1],
76                          [-1,  1, -1],
77                          [-1, 63, -1],
78                          [-4,  0, -4],
79                          [-4,  1, -2],
80                          [-4, 63, -1],
81                         ];
82
83    // runtime tests
84    for (let i: int = 0; i<tests.length; i++)
85    {
86        assertEQ(tests[i][0] >> tests[i][1], tests[i][2])
87    }
88
89    // compile time tests
90    assertEQ(0x7FFFFFFFFFFFFFFF >>    0, 0x7FFFFFFFFFFFFFFF)
91    assertEQ(0x7FFFFFFFFFFFFFFF >>   64, 0x7FFFFFFFFFFFFFFF)
92    assertEQ(0x7FFFFFFFFFFFFFFF >>  -64, 0x7FFFFFFFFFFFFFFF)
93    assertEQ(0x7FFFFFFFFFFFFFFF >>    1, 0x3FFFFFFFFFFFFFFF)
94    assertEQ(0x7FFFFFFFFFFFFFFF >>   65, 0x3FFFFFFFFFFFFFFF)
95    assertEQ(0x7FFFFFFFFFFFFFFF >>   62, 1)
96    assertEQ(0x7FFFFFFFFFFFFFFF >>  126, 1)
97    assertEQ(0x7FFFFFFFFFFFFFFF >>   63, 0)
98    assertEQ(0x7FFFFFFFFFFFFFFF >>  127, 0)
99    assertEQ(0x7FFFFFFFFFFFFFFF >>   -1, 0)
100    assertEQ(-1 >>  0, -1)
101    assertEQ(-1 >>  1, -1)
102    assertEQ(-1 >> 63, -1)
103    assertEQ(-4 >>  0, -4)
104    assertEQ(-4 >>  1, -2)
105    assertEQ(-4 >> 63, -1)
106}
107
108
109function main(): void
110{
111    test_signed_right_shift_int();
112    test_signed_right_shift_long();
113}
114