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 16function main():void{ 17 let boo = new bar() 18 19 assert boo.foo1() == 10; 20 assert boo.foo2() == "a"; 21 assert boo.foo3() == true; 22 23 assert boo.foo4() == 30; 24 assert boo.foo4(new Int(5)) == 25; 25 26 assert boo.foo5(new Int(5)) == 55; 27 assert boo.foo5(new Int(5),new Int(10)) == 45; 28 29 30 assert boo.foo6() == undefined; 31 assert boo.foo7() == undefined; 32 assert boo.foo8() == undefined; 33 34 assert boo.foo9() == 0; 35 assert boo.foo9(new Int(5)) == -1; 36 37 assert boo.foo10(new Int(5)) == 0; 38 assert boo.foo10(new Int(5),new Int(10)) == -1; 39 40 assert boo.foo11() == 0; 41 assert boo.foo12() == 0; 42 43 assert boo.foo13(new Int(10)) == 15; 44 assert boo.foo14(new Int(10)) == 25; 45 46 assert boo.foo15(new Int(10),new Int(5)) == 20; 47 assert boo.foo16(new Int(10),new Int(5)) == 30; 48} 49 50class bar { 51 foo1(a : Int = 10) : Int { 52 return a; 53 } 54 55 foo2(a : string = "a") : string { 56 return a; 57 } 58 59 foo3(a : Boolean = true) : Boolean { 60 return a; 61 } 62 63 foo4(a : Int = 10, b : Int = 20) : Int { 64 return a + b; 65 } 66 67 foo5(a : Int = 10, b : Int = 20, c : Int = 30) : Int { 68 assert a == 5; 69 70 return a + b + c; 71 } 72 73 foo6(a? : Int) : Int|undefined { 74 return a; 75 } 76 77 foo7(a? : string) : string|undefined { 78 return a; 79 } 80 81 foo8(a? : Boolean) : Boolean|undefined { 82 return a; 83 } 84 85 foo9(a? : Int, b? : Int) : Int { 86 if(a == undefined && b == undefined){ 87 return 0; 88 } 89 if(b == undefined){ 90 return -1; 91 } 92 return a! + b; 93 } 94 95 foo10(a? : Int, b? : Int, c? : Int) : Int { 96 assert a! == 5; 97 if(b == undefined && c == undefined){ 98 return 0; 99 } 100 if(c == undefined){ 101 return -1; 102 } 103 104 return a! + b! + c; 105 } 106 107 foo11(a : Int = 5, b? : Int) : Int { 108 if(b == undefined){ 109 return 0; 110 } 111 return a + b; 112 } 113 114 foo12(a? : Int, b : Int = 5, c? : Int) : Int { 115 assert b == 5; 116 117 if(a == undefined && c == undefined){ 118 return 0; 119 } 120 121 return a! + b + c!; 122 } 123 124 foo13(a : Int, b : Int = 5) : Int { 125 return a + b; 126 } 127 128 foo14(a : Int, b : Int = 5, c : Int = 10) : Int { 129 return a + b + c; 130 } 131 132 foo15(a : Int, b : Int, c : Int = 5) : Int { 133 return a + b + c; 134 } 135 136 foo16(a : Int, b : Int, c : Int = 10, d : Int = 5) : Int { 137 return a + b + c + d; 138 } 139} 140