Skip to content

Commit f4b11dd

Browse files
committed
Add some math methods
1 parent 2657d2d commit f4b11dd

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

java_runtime/src/classes/java/lang/math.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@ impl Math {
1818
methods: vec![
1919
JavaMethodProto::new("abs", "(I)I", Self::abs, MethodAccessFlags::STATIC),
2020
JavaMethodProto::new("abs", "(J)J", Self::abs_long, MethodAccessFlags::STATIC),
21+
JavaMethodProto::new("abs", "(F)F", Self::abs_float, MethodAccessFlags::STATIC),
22+
JavaMethodProto::new("abs", "(D)D", Self::abs_double, MethodAccessFlags::STATIC),
2123
JavaMethodProto::new("max", "(II)I", Self::max, MethodAccessFlags::STATIC),
24+
JavaMethodProto::new("max", "(JJ)J", Self::max_long, MethodAccessFlags::STATIC),
2225
JavaMethodProto::new("min", "(II)I", Self::min, MethodAccessFlags::STATIC),
26+
JavaMethodProto::new("min", "(JJ)J", Self::min_long, MethodAccessFlags::STATIC),
2327
],
2428
fields: vec![],
2529
access_flags: Default::default(),
2630
}
2731
}
2832

2933
async fn abs(_: &Jvm, _: &mut RuntimeContext, x: i32) -> Result<i32> {
30-
tracing::debug!("java.lang.Math::abs({:?})", x);
34+
tracing::debug!("java.lang.Math::abs({x:?})");
3135

3236
Ok(x.abs())
3337
}
@@ -38,14 +42,38 @@ impl Math {
3842
Ok(x.abs())
3943
}
4044

45+
async fn abs_float(_: &Jvm, _: &mut RuntimeContext, x: f32) -> Result<f32> {
46+
tracing::debug!("java.lang.Math::abs({x:?})");
47+
48+
Ok(x.abs())
49+
}
50+
51+
async fn abs_double(_: &Jvm, _: &mut RuntimeContext, x: f64) -> Result<f64> {
52+
tracing::debug!("java.lang.Math::abs({x:?})");
53+
54+
Ok(x.abs())
55+
}
56+
4157
async fn max(_: &Jvm, _: &mut RuntimeContext, x: i32, y: i32) -> Result<i32> {
42-
tracing::debug!("java.lang.Math::max({:?}, {:?})", x, y);
58+
tracing::debug!("java.lang.Math::max({x:?}, {y:?})");
59+
60+
Ok(x.max(y))
61+
}
62+
63+
async fn max_long(_: &Jvm, _: &mut RuntimeContext, x: i64, y: i64) -> Result<i64> {
64+
tracing::debug!("java.lang.Math::max({x:?}, {y:?})");
4365

4466
Ok(x.max(y))
4567
}
4668

4769
async fn min(_: &Jvm, _: &mut RuntimeContext, x: i32, y: i32) -> Result<i32> {
48-
tracing::debug!("java.lang.Math::min({:?}, {:?})", x, y);
70+
tracing::debug!("java.lang.Math::min({x:?}, {y:?})");
71+
72+
Ok(x.min(y))
73+
}
74+
75+
async fn min_long(_: &Jvm, _: &mut RuntimeContext, x: i64, y: i64) -> Result<i64> {
76+
tracing::debug!("java.lang.Math::min({x:?}, {y:?})");
4977

5078
Ok(x.min(y))
5179
}

java_runtime/tests/classes/java/lang/test_math.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,27 @@ async fn test_abs() -> Result<()> {
99
assert_eq!(42i32, jvm.invoke_static("java/lang/Math", "abs", "(I)I", (42,)).await?);
1010
assert_eq!(42i32, jvm.invoke_static("java/lang/Math", "abs", "(I)I", (-42,)).await?);
1111

12+
assert_eq!(42i64, jvm.invoke_static("java/lang/Math", "abs", "(J)J", (42i64,)).await?);
13+
assert_eq!(42i64, jvm.invoke_static("java/lang/Math", "abs", "(J)J", (-42i64,)).await?);
14+
15+
assert_eq!(3.15f32, jvm.invoke_static("java/lang/Math", "abs", "(F)F", (3.15f32,)).await?);
16+
assert_eq!(3.15f32, jvm.invoke_static("java/lang/Math", "abs", "(F)F", (-3.15f32,)).await?);
17+
18+
assert_eq!(2.818f64, jvm.invoke_static("java/lang/Math", "abs", "(D)D", (2.818f64,)).await?);
19+
assert_eq!(2.818f64, jvm.invoke_static("java/lang/Math", "abs", "(D)D", (-2.818f64,)).await?);
20+
21+
Ok(())
22+
}
23+
24+
#[tokio::test]
25+
async fn test_min_max() -> Result<()> {
26+
let jvm = test_jvm().await?;
27+
28+
assert_eq!(10i32, jvm.invoke_static("java/lang/Math", "max", "(II)I", (10, 5)).await?);
29+
assert_eq!(5i32, jvm.invoke_static("java/lang/Math", "min", "(II)I", (10, 5)).await?);
30+
31+
assert_eq!(20i64, jvm.invoke_static("java/lang/Math", "max", "(JJ)J", (20i64, 15i64)).await?);
32+
assert_eq!(15i64, jvm.invoke_static("java/lang/Math", "min", "(JJ)J", (20i64, 15i64)).await?);
33+
1234
Ok(())
1335
}

0 commit comments

Comments
 (0)