Skip to content

Commit 5bed8e7

Browse files
Merge pull request #1 from CetusProtocol/sui
Sui
2 parents 188364f + 2f82a1d commit 5bed8e7

23 files changed

+2504
-81
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
/sui/.idea
2+
/aptos/.idea
3+
/aptos/.aptos
4+
/sui/build
5+
/aptos/build
16
/build
27
/.idea
3-
.idea
8+
/.aptos
File renamed without changes.

aptos/Move.toml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[package]
2+
name = 'IntegerMate'
3+
version = '1.0.0'
4+
5+
[addresses]
6+
std = "0x1"
7+
aptos_std = "0x1"
8+
aptos_framework = "0x1"
9+
integer_mate = "_"
10+
11+
[dependencies.MoveStdlib]
12+
git = "https://github.com/aptos-labs/aptos-core.git"
13+
subdir = "aptos-move/framework/move-stdlib"
14+
rev = "devnet"

aptos/Sui.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "IntegerMate"
3+
version = "0.0.1"
4+
5+
[dependencies]
6+
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework", rev = "devnet" }
7+
8+
[addresses]
9+
integer_mate = "0x0"
10+
sui = "0000000000000000000000000000000000000002"

aptos/sources/full_math_u128.move

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module integer_mate::full_math_u128 {
2+
public fun mul_div_floor(num1: u128, num2: u128, denom: u128): u128 {
3+
let r = full_mul(num1, num2) / (denom as u256);
4+
(r as u128)
5+
}
6+
7+
public fun mul_div_round(num1: u128, num2: u128, denom: u128): u128 {
8+
let r = (full_mul(num1, num2) + ((denom as u256) >> 1)) / (denom as u256);
9+
(r as u128)
10+
}
11+
12+
public fun mul_div_ceil(num1: u128, num2: u128, denom: u128): u128 {
13+
let r = (full_mul(num1, num2) + ((denom as u256) - 1)) / (denom as u256);
14+
(r as u128)
15+
}
16+
17+
public fun mul_shr(num1: u128, num2: u128, shift: u8): u128 {
18+
let product = full_mul(num1, num2) >> shift;
19+
(product as u128)
20+
}
21+
22+
public fun mul_shl(num1: u128, num2: u128, shift: u8): u128 {
23+
let product = full_mul(num1, num2) << shift;
24+
(product as u128)
25+
}
26+
27+
public fun full_mul(num1: u128, num2: u128): u256 {
28+
(num1 as u256) * (num2 as u256)
29+
}
30+
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
module integer_mate::full_math_u64 {
22
public fun mul_div_floor(num1: u64, num2: u64, denom: u64): u64 {
3-
let r = ((num1 as u128) * (num2 as u128)) / (denom as u128);
3+
let r = full_mul(num1, num2) / (denom as u128);
44
(r as u64)
55
}
66

77
public fun mul_div_round(num1: u64, num2: u64, denom: u64): u64 {
8-
let r = (((num1 as u128) * (num2 as u128)) + ((denom as u128) >> 1)) / (denom as u128);
8+
let r = (full_mul(num1, num2) + ((denom as u128) >> 1)) / (denom as u128);
99
(r as u64)
1010
}
1111

1212
public fun mul_div_ceil(num1: u64, num2: u64, denom: u64): u64 {
13-
let r = (((num1 as u128) * (num2 as u128)) + ((denom as u128) - 1)) / (denom as u128);
13+
let r = (full_mul(num1, num2) + ((denom as u128) - 1)) / (denom as u128);
1414
(r as u64)
1515
}
1616

1717
public fun mul_shr(num1: u64, num2: u64, shift: u8): u64 {
18-
let r = ((num1 as u128) * (num2 as u128)) >> shift;
18+
let r = full_mul(num1, num2) >> shift;
1919
(r as u64)
2020
}
2121

2222
public fun mul_shl(num1: u64, num2: u64, shift: u8): u64 {
23-
let r = ((num1 as u128) * (num2 as u128)) << shift;
23+
let r = full_mul(num1, num2) << shift;
2424
(r as u64)
2525
}
2626

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module integer_mate::i128 {
2-
use std::error;
32
use integer_mate::i64;
3+
use integer_mate::i32;
44

5-
const OVERFLOW: u64 = 0;
5+
const EOverflow: u64 = 0;
66

77
const MIN_AS_U128: u128 = 1 << 127;
88
const MAX_AS_U128: u128 = 0x7fffffffffffffffffffffffffffffff;
@@ -22,14 +22,14 @@ module integer_mate::i128 {
2222
}
2323

2424
public fun from(v: u128): I128 {
25-
assert!(v <= MAX_AS_U128, error::invalid_argument(OVERFLOW));
25+
assert!(v <= MAX_AS_U128, EOverflow);
2626
I128 {
2727
bits: v
2828
}
2929
}
3030

3131
public fun neg_from(v: u128): I128 {
32-
assert!(v <= MIN_AS_U128, error::invalid_argument(OVERFLOW));
32+
assert!(v <= MIN_AS_U128, EOverflow);
3333
if (v == 0) {
3434
I128 {
3535
bits: v
@@ -66,7 +66,7 @@ module integer_mate::i128 {
6666
public fun add(num1: I128, num2: I128): I128 {
6767
let sum = wrapping_add(num1, num2);
6868
let overflow = (sign(num1) & sign(num2) & u8_neg(sign(sum))) + (u8_neg(sign(num1)) & u8_neg(sign(num2)) & sign(sum));
69-
assert!(overflow == 0, error::invalid_argument(OVERFLOW));
69+
assert!(overflow == 0, EOverflow);
7070
sum
7171
}
7272

@@ -119,7 +119,7 @@ module integer_mate::i128 {
119119
if (sign(v) == 0) {
120120
v
121121
} else {
122-
assert!(v.bits > MIN_AS_U128, error::invalid_argument(OVERFLOW));
122+
assert!(v.bits > MIN_AS_U128, EOverflow);
123123
I128 {
124124
bits: u128_neg(v.bits - 1)
125125
}
@@ -167,6 +167,14 @@ module integer_mate::i128 {
167167
}
168168
}
169169

170+
public fun as_i32(v: I128): i32::I32 {
171+
if (is_neg(v)) {
172+
return i32::neg_from((abs_u128(v) as u32))
173+
} else {
174+
return i32::from((abs_u128(v) as u32))
175+
}
176+
}
177+
170178
public fun sign(v: I128): u8 {
171179
((v.bits >> 127) as u8)
172180
}

0 commit comments

Comments
 (0)