1/*
2 * Copyright (c) 2023-2024 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
16class A {
17
18  _field: int = 30;
19  _bfield: boolean = true;
20
21  constructor() { }
22
23  get field(): int {
24    return this._field;
25  }
26
27  set field(a: int): void {
28    this._field = a;
29  }
30
31  get bfield(): boolean {
32    return this._bfield;
33  }
34
35  set bfield(b: boolean): void {
36    this._bfield = b;
37  }
38}
39
40function main(): void {
41  let obj: A = new A();
42
43  let get_field = obj.field;
44  assert get_field == 30;
45
46  get_field = obj.field + obj.field;
47  assert get_field == 60;
48
49  get_field = obj.field + 10;
50  assert get_field == 40;
51
52  get_field = 10 + obj.field;
53  assert get_field == 40;
54
55  obj.field = 10;
56  get_field = obj.field;
57  assert get_field == 10;
58
59  obj.field = obj.field;
60  get_field = obj.field;
61  assert get_field == 10;
62
63  obj.field = obj.field + obj.field;
64  get_field = obj.field;
65  assert get_field == 20;
66
67  obj.field = obj.field + 10;
68  get_field = obj.field;
69  assert get_field == 30;
70
71  obj.field = 10 + obj.field;
72  get_field = obj.field;
73  assert get_field == 40;
74
75  obj.field = 10 * obj.field;
76  get_field = obj.field;
77  assert get_field == 400;
78
79  obj.field = obj.field / 2;
80  get_field = obj.field;
81  assert get_field == 200;
82
83  obj.field = 1;
84  obj.field = obj.field & 0;
85  get_field = obj.field;
86  assert get_field == 0;
87
88  obj._bfield = true;
89  obj._bfield = obj._bfield & false;
90  let get_bfield = obj._bfield;
91  assert get_bfield == false;
92
93  obj._bfield = true;
94  obj._bfield = obj._bfield | false;
95  get_bfield = obj._bfield;
96  assert get_bfield == true;
97
98  obj._bfield = true;
99  obj._bfield = obj._bfield | obj._bfield;
100  get_bfield = obj._bfield;
101  assert get_bfield == true;
102}
103