Skip to content

Commit be05a7c

Browse files
committed
More examples in Vector2/Vector3 angle tests
1 parent 0cc5036 commit be05a7c

File tree

2 files changed

+63
-27
lines changed

2 files changed

+63
-27
lines changed

itest/rust/src/builtin_tests/geometry/vector_test/vector2_test.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,10 @@
77

88
use crate::framework::itest;
99

10-
use godot::builtin::{
11-
inner::InnerVector2,
12-
math::{assert_eq_approx, ApproxEq},
13-
real,
14-
real_consts::PI,
15-
Vector2, Vector2Axis,
16-
};
10+
use godot::builtin::inner::InnerVector2;
11+
use godot::builtin::math::{assert_eq_approx, ApproxEq};
12+
use godot::builtin::real_consts::{FRAC_PI_2, PI};
13+
use godot::builtin::{real, Vector2, Vector2Axis};
1714

1815
#[itest]
1916
fn abs() {
@@ -25,8 +22,16 @@ fn abs() {
2522
#[itest]
2623
fn angle() {
2724
let a = Vector2::new(1.2, -3.4);
25+
let b = Vector2::new(-5.6, 7.8);
2826

2927
assert_eq!(a.angle(), a.as_inner().angle() as real);
28+
assert_eq!(b.angle(), b.as_inner().angle() as real);
29+
30+
// Check direction (note: DOWN=(0, 1)).
31+
assert_eq_approx!(Vector2::RIGHT.angle(), 0.0);
32+
assert_eq_approx!(Vector2::DOWN.angle(), FRAC_PI_2);
33+
assert_eq_approx!(Vector2::LEFT.angle(), PI);
34+
assert_eq_approx!(Vector2::UP.angle(), -FRAC_PI_2);
3035
}
3136

3237
#[itest]
@@ -35,6 +40,11 @@ fn angle_to() {
3540
let b = Vector2::new(-5.6, 7.8);
3641

3742
assert_eq_approx!(a.angle_to(b), a.as_inner().angle_to(b) as real);
43+
assert_eq_approx!(b.angle_to(a), b.as_inner().angle_to(a) as real);
44+
45+
// Check direction (note: DOWN=(0, 1)).
46+
assert_eq_approx!(Vector2::RIGHT.angle_to(Vector2::DOWN), FRAC_PI_2);
47+
assert_eq_approx!(Vector2::DOWN.angle_to(Vector2::RIGHT), -FRAC_PI_2);
3848
}
3949

4050
#[itest]
@@ -43,6 +53,17 @@ fn angle_to_point() {
4353
let b = Vector2::new(-5.6, 7.8);
4454

4555
assert_eq!(a.angle_to_point(b), a.as_inner().angle_to_point(b) as real);
56+
assert_eq!(b.angle_to_point(a), b.as_inner().angle_to_point(a) as real);
57+
58+
// Check absolute value.
59+
assert_eq_approx!(
60+
Vector2::new(1.0, 1.0).angle_to_point(Vector2::new(1.0, 2.0)),
61+
FRAC_PI_2
62+
); // up
63+
assert_eq_approx!(
64+
Vector2::new(1.0, 1.0).angle_to_point(Vector2::new(1.0, -1.0)),
65+
-FRAC_PI_2
66+
); // down
4667
}
4768

4869
#[itest]

itest/rust/src/builtin_tests/geometry/vector_test/vector3_test.rs

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@
77

88
use crate::framework::itest;
99

10-
use godot::builtin::{
11-
inner::InnerVector3,
12-
math::{assert_eq_approx, ApproxEq},
13-
real,
14-
real_consts::PI,
15-
Vector3, Vector3Axis,
16-
};
10+
use godot::builtin::inner::InnerVector3;
11+
use godot::builtin::math::{assert_eq_approx, ApproxEq};
12+
use godot::builtin::real;
13+
use godot::builtin::real_consts::{FRAC_PI_4, PI};
14+
use godot::builtin::{Vector3, Vector3Axis};
1715

1816
#[itest]
1917
fn abs() {
@@ -28,6 +26,36 @@ fn angle_to() {
2826
let b = Vector3::new(-7.8, 9.1, -11.12);
2927

3028
assert_eq_approx!(a.angle_to(b), a.as_inner().angle_to(b) as real);
29+
30+
// Concrete example (135°).
31+
let right = Vector3::new(1.0, 0.0, 0.0);
32+
let back_left = Vector3::new(-1.0, 0.0, 1.0);
33+
34+
assert_eq_approx!(right.angle_to(back_left), 3.0 * FRAC_PI_4);
35+
assert_eq_approx!(back_left.angle_to(right), 3.0 * FRAC_PI_4);
36+
}
37+
38+
#[itest]
39+
fn signed_angle_to() {
40+
let a = Vector3::new(1.0, 1.0, 0.0);
41+
let b = Vector3::new(1.0, 1.0, 1.0);
42+
let c = Vector3::UP;
43+
44+
assert_eq_approx!(
45+
a.signed_angle_to(b, c),
46+
a.as_inner().signed_angle_to(b, c) as real,
47+
"signed_angle_to\n",
48+
);
49+
50+
// Concrete example (135°).
51+
let right = Vector3::new(1.0, 0.0, 0.0);
52+
let back_left = Vector3::new(-1.0, 0.0, 1.0);
53+
54+
let pi_3_4 = 3.0 * FRAC_PI_4;
55+
assert_eq_approx!(right.signed_angle_to(back_left, Vector3::UP), -pi_3_4);
56+
assert_eq_approx!(right.signed_angle_to(back_left, Vector3::DOWN), pi_3_4);
57+
assert_eq_approx!(back_left.signed_angle_to(right, Vector3::UP), pi_3_4);
58+
assert_eq_approx!(back_left.signed_angle_to(right, Vector3::DOWN), -pi_3_4);
3159
}
3260

3361
#[itest]
@@ -402,19 +430,6 @@ fn sign() {
402430
assert_eq!(b.sign(), b.as_inner().sign());
403431
}
404432

405-
#[itest]
406-
fn signed_angle_to() {
407-
let a = Vector3::new(1.0, 1.0, 0.0);
408-
let b = Vector3::new(1.0, 1.0, 1.0);
409-
let c = Vector3::UP;
410-
411-
assert_eq_approx!(
412-
a.signed_angle_to(b, c),
413-
a.as_inner().signed_angle_to(b, c) as real,
414-
"signed_angle_to\n",
415-
);
416-
}
417-
418433
#[itest]
419434
fn slerp() {
420435
let a = Vector3::new(1.2, -3.4, 5.6);

0 commit comments

Comments
 (0)