| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- // SPDX-License-Identifier: Apache-2.0
- use crate::{build_solidity, BorshToken};
- use num_bigint::BigInt;
- use num_traits::Zero;
- #[test]
- fn rational() {
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- uint x = .5 * 8;
- return x;
- }
- function test2() public returns (uint) {
- uint x = .4 * 8 + 0.8;
- return x;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(4u8)
- }
- );
- let returns = vm.function("test2", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(4u8)
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- uint x = 4.8 + 0.2;
- return x;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(5u8)
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- uint x = 4.8 / 0.2;
- return x;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(24)
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- uint x = 4.8 % 0.2;
- return x;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::zero(),
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- uint x = 5.2 - 1.2;
- return x;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(4u8),
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- return 1.4 + 1.6;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(3u8)
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test() public returns (uint) {
- return 1.4e4 + 1.6e3;
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm.function("test", &[]).unwrap();
- assert_eq!(
- returns,
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(15600u32)
- }
- );
- let mut vm = build_solidity(
- r#"
- contract foo {
- function test(uint64 x) public returns (uint64, uint) {
- return (x * 961748941, 2.5 + 3.5 - 1);
- }
- }"#,
- );
- vm.constructor(&[]);
- let returns = vm
- .function(
- "test",
- &[BorshToken::Uint {
- width: 64,
- value: BigInt::from(982451653u32),
- }],
- )
- .unwrap()
- .unwrap_tuple();
- assert_eq!(
- returns,
- vec![
- BorshToken::Uint {
- width: 64,
- value: BigInt::from(961748941u64 * 982451653u64)
- },
- BorshToken::Uint {
- width: 256,
- value: BigInt::from(5u8)
- },
- ]
- );
- }
|