81 lines
1.1 KiB
Plaintext
81 lines
1.1 KiB
Plaintext
pub module impl_test;
|
|
|
|
struct Vector2
|
|
{
|
|
i32 x;
|
|
i32 y;
|
|
}
|
|
|
|
impl Vector2
|
|
{
|
|
pub i32 magnitude(&self)
|
|
{
|
|
self.x * self.x + self.y * self.y
|
|
}
|
|
}
|
|
|
|
pub void test_inherent_impl()
|
|
{
|
|
let v = Vector2 {
|
|
x: 3,
|
|
y: 4,
|
|
};
|
|
assert_eq!(v.magnitude(), 25);
|
|
}
|
|
|
|
trait Display
|
|
{
|
|
String display(&self);
|
|
}
|
|
|
|
impl Display for Vector2
|
|
{
|
|
String display(&self)
|
|
{
|
|
format!("({}, {})", self.x, self.y)
|
|
}
|
|
}
|
|
|
|
pub void test_trait_impl_block()
|
|
{
|
|
let v = Vector2 {
|
|
x: 1,
|
|
y: 2,
|
|
};
|
|
let s = v.display();
|
|
assert_eq!(s.len() > 0, true);
|
|
}
|
|
|
|
impl Vector2
|
|
{
|
|
pub Vector2 add(&self, Vector2 other)
|
|
{
|
|
Vector2 {
|
|
x: self.x + other.x,
|
|
y: self.y + other.y,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub void test_multiple_impls()
|
|
{
|
|
let a = Vector2 {
|
|
x: 1,
|
|
y: 2,
|
|
};
|
|
let b = Vector2 {
|
|
x: 3,
|
|
y: 4,
|
|
};
|
|
let c = a.add(b);
|
|
assert_eq!(c.x, 4);
|
|
assert_eq!(c.y, 6);
|
|
}
|
|
|
|
pub void run_tests()
|
|
{
|
|
test_inherent_impl();
|
|
test_trait_impl_block();
|
|
test_multiple_impls();
|
|
}
|