13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2023-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_multiply(): void {
173af6ab5fSopenharmony_ci    assert new BigInt(10).operatorMultiply(new BigInt(10)) == 100n;
183af6ab5fSopenharmony_ci    assert new BigInt(0).operatorMultiply(new BigInt(50)) == 0n;
193af6ab5fSopenharmony_ci    assert new BigInt(1).operatorMultiply(new BigInt(50)) == 50n;
203af6ab5fSopenharmony_ci    assert new BigInt(50).operatorMultiply(new BigInt(5)) == 250n;
213af6ab5fSopenharmony_ci    assert new BigInt(50).operatorMultiply(new BigInt(-5)) == -250n;
223af6ab5fSopenharmony_ci    assert new BigInt(-1).operatorMultiply(new BigInt(-5)) == 5n;
233af6ab5fSopenharmony_ci    assert new BigInt(0).operatorMultiply(new BigInt(0)) == 0n;
243af6ab5fSopenharmony_ci    assert new BigInt(123).operatorMultiply(new BigInt(1)) == 123n;
253af6ab5fSopenharmony_ci    assert new BigInt(1234).operatorMultiply(new BigInt(987)) == 1217958n;
263af6ab5fSopenharmony_ci    assert new BigInt(3241847031247230147213740214703214721047312n).operatorMultiply(new BigInt(412343124123421347812304712431421204731024n)) == 1336753332794721625246945391107220242430725631478413717131017736872102322242538207488n;
273af6ab5fSopenharmony_ci    assert new BigInt(-3241847031247230147213740214703214721047312n).operatorMultiply(new BigInt(-412343124123421347812304712431421204731024n)) == 1336753332794721625246945391107220242430725631478413717131017736872102322242538207488n;
283af6ab5fSopenharmony_ci    assert new BigInt(-3241847031247230147213740214703214721047312n).operatorMultiply(new BigInt(412343124123421347812304712431421204731024n)) == -1336753332794721625246945391107220242430725631478413717131017736872102322242538207488n;
293af6ab5fSopenharmony_ci    assert new BigInt(3241847031247230147213740214703214721047312n).operatorMultiply(new BigInt(-412343124123421347812304712431421204731024n)) == -1336753332794721625246945391107220242430725631478413717131017736872102322242538207488n;
303af6ab5fSopenharmony_ci    assert new BigInt(256).operatorMultiply(new BigInt(256)) == 65536n;
313af6ab5fSopenharmony_ci}
323af6ab5fSopenharmony_ci
333af6ab5fSopenharmony_cifunction test_multiplication(): void {
343af6ab5fSopenharmony_ci    const a = 23443495146314363289895841n
353af6ab5fSopenharmony_ci    const b = 245000234343499329134n
363af6ab5fSopenharmony_ci    const c = -245000234343499329134n
373af6ab5fSopenharmony_ci
383af6ab5fSopenharmony_ci    /* Multiplication testing (*) */
393af6ab5fSopenharmony_ci    assert 978667632325344545n * 4534000101n == 4437279143808543031889799045n
403af6ab5fSopenharmony_ci    assert a * b == 5743661804677708098900659843374372544236731694n
413af6ab5fSopenharmony_ci    assert a * c == -5743661804677708098900659843374372544236731694n
423af6ab5fSopenharmony_ci    assert a * 0n == 0n
433af6ab5fSopenharmony_ci    assert c * 0n == 0n
443af6ab5fSopenharmony_ci
453af6ab5fSopenharmony_ci    /* Division testing (/) */
463af6ab5fSopenharmony_ci    assert 39735235034886462n / 89221422n == 445355321n
473af6ab5fSopenharmony_ci    assert a / b == 95687n
483af6ab5fSopenharmony_ci    assert a / c == -95687n
493af6ab5fSopenharmony_ci    assert 0n / a == 0n
503af6ab5fSopenharmony_ci
513af6ab5fSopenharmony_ci    let err = false;
523af6ab5fSopenharmony_ci    try {
533af6ab5fSopenharmony_ci        a / 0n
543af6ab5fSopenharmony_ci    } catch (e) {
553af6ab5fSopenharmony_ci        if (e instanceof Error) {
563af6ab5fSopenharmony_ci            err = true
573af6ab5fSopenharmony_ci        }
583af6ab5fSopenharmony_ci    }
593af6ab5fSopenharmony_ci    assert err
603af6ab5fSopenharmony_ci
613af6ab5fSopenharmony_ci    /* Remainder of the division (%) */
623af6ab5fSopenharmony_ci    assert 493433405047004109n % 111114444n == 18100749n
633af6ab5fSopenharmony_ci    assert a % b == a % c
643af6ab5fSopenharmony_ci    assert 0n % a == 0n
653af6ab5fSopenharmony_ci
663af6ab5fSopenharmony_ci    err = false;
673af6ab5fSopenharmony_ci    try {
683af6ab5fSopenharmony_ci        a % 0n
693af6ab5fSopenharmony_ci    } catch (e) {
703af6ab5fSopenharmony_ci        if (e instanceof Error) {
713af6ab5fSopenharmony_ci            err = true
723af6ab5fSopenharmony_ci        }
733af6ab5fSopenharmony_ci    }
743af6ab5fSopenharmony_ci    assert err
753af6ab5fSopenharmony_ci}
763af6ab5fSopenharmony_ci
773af6ab5fSopenharmony_cifunction main() {
783af6ab5fSopenharmony_ci    test_multiply()
793af6ab5fSopenharmony_ci    test_multiplication()
803af6ab5fSopenharmony_ci}
813af6ab5fSopenharmony_ci
82