add test for vector(using unittest)

This commit is contained in:
shenjack 2023-03-28 23:23:50 +08:00
parent 31faeb2a70
commit d7e27657f3
5 changed files with 205 additions and 5 deletions

3
DR.py
View File

@ -51,7 +51,8 @@ def main() -> None:
try: try:
from libs.pyglet_rs import get_version_str from libs.pyglet_rs import get_version_str
print('pyglet_rs available:', get_version_str()) print('pyglet_rs available:', get_version_str())
print('trying to patch pyglet_rs')
from libs.pyglet_rs import patch_vector
except ImportError as e: except ImportError as e:
print('pyglet_rs import error') print('pyglet_rs import error')
traceback.print_exc() traceback.print_exc()

View File

@ -13,8 +13,9 @@ from .lib import (Sprite_rs,
""" """
from .lib import * from .lib import *
from typing import TYPE_CHECKING from typing import TYPE_CHECKING, Union
# noinspection PyUnresolvedReferences
__version__ = get_version_str() __version__ = get_version_str()
__all__ = ['patch_sprite', 'patch_vector', 'patch_matrix', 'patch_all', __all__ = ['patch_sprite', 'patch_vector', 'patch_matrix', 'patch_all',
'Sprite_rs', 'Sprite_rs',
@ -24,16 +25,48 @@ __all__ = ['patch_sprite', 'patch_vector', 'patch_matrix', 'patch_all',
if TYPE_CHECKING: if TYPE_CHECKING:
from pyglet.event import EventDispatcher from pyglet.event import EventDispatcher
Number = Union[int, float]
def get_version_str() -> str: ... def get_version_str() -> str: ...
class Sprite_rs(EventDispatcher): ... class Sprite_rs(EventDispatcher): ...
class Vector2_rs: ...
class Vector3_rs: ... class Vector2_rs:
class Vector4_rs: ... def __init__(self, x: Number, y: Number): ...
def __add__(self, other: "Vector2_rs") -> "Vector2_rs": ...
def __sub__(self, other: "Vector2_rs") -> "Vector2_rs": ...
def __mul__(self, other: "Vector2_rs") -> "Vector2_rs": ...
def __truediv__(self, other: "Vector2_rs") -> "Vector2_rs": ...
def __floordiv__(self, other: "Vector2_rs") -> "Vector2_rs": ...
def __repr__(self) -> str: ...
class Vector3_rs:
def __init__(self, x: Number, y: Number, z: Number): ...
def __add__(self, other: "Vector3_rs") -> "Vector3_rs": ...
def __sub__(self, other: "Vector3_rs") -> "Vector3_rs": ...
def __mul__(self, other: "Vector3_rs") -> "Vector3_rs": ...
def __truediv__(self, other: "Vector3_rs") -> "Vector3_rs": ...
def __floordiv__(self, other: "Vector3_rs") -> "Vector3_rs": ...
def __repr__(self) -> str: ...
class Vector4_rs:
def __init__(self, x: Number, y: Number, z: Number, w: Number): ...
def __add__(self, other: "Vector4_rs") -> "Vector4_rs": ...
def __sub__(self, other: "Vector4_rs") -> "Vector4_rs": ...
def __mul__(self, other: "Vector4_rs") -> "Vector4_rs": ...
def __truediv__(self, other: "Vector4_rs") -> "Vector4_rs": ...
def __floordiv__(self, other: "Vector4_rs") -> "Vector4_rs": ...
def __repr__(self) -> str: ...
class Matrix3_rs: ... class Matrix3_rs: ...
class Matrix4_rs: ... class Matrix4_rs: ...

View File

@ -24,5 +24,7 @@ fn module_init(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_class::<sprite::Sprite>()?; m.add_class::<sprite::Sprite>()?;
// vector // vector
m.add_class::<pymath::python_class::PyVector2>()?; m.add_class::<pymath::python_class::PyVector2>()?;
m.add_class::<pymath::python_class::PyVector3>()?;
m.add_class::<pymath::python_class::PyVector4>()?;
Ok(()) Ok(())
} }

View File

@ -94,5 +94,103 @@ pub mod python_class {
data: self.data.floordiv(&other.data), data: self.data.floordiv(&other.data),
}; };
} }
fn __repr__(&self) -> String {
return format!("Vector2_rs({}, {})", self.data.x, self.data.y);
}
}
#[pymethods]
impl PyVector3 {
#[new]
fn py_new(x: f64, y: f64, z: f64) -> Self {
return Self {
data: Vector3::new(x, y, z),
};
}
fn __add__(&self, other: &Self) -> Self {
return Self {
data: self.data + other.data,
};
}
fn __sub__(&self, other: &Self) -> Self {
return Self {
data: self.data - other.data,
};
}
fn __mul__(&self, other: &Self) -> Self {
return Self {
data: self.data * other.data,
};
}
fn __truediv__(&self, other: &Self) -> Self {
return Self {
data: self.data / other.data,
};
}
fn __floordiv__(&self, other: &Self) -> Self {
return Self {
data: self.data.floordiv(&other.data),
};
}
fn __repr__(&self) -> String {
return format!(
"Vector3_rs({}, {}, {})",
self.data.x, self.data.y, self.data.z
);
}
}
#[pymethods]
impl PyVector4 {
#[new]
fn py_new(x: f64, y: f64, z: f64, w: f64) -> Self {
return Self {
data: Vector4::new(x, y, z, w),
};
}
fn __add__(&self, other: &Self) -> Self {
return Self {
data: self.data + other.data,
};
}
fn __sub__(&self, other: &Self) -> Self {
return Self {
data: self.data - other.data,
};
}
fn __mul__(&self, other: &Self) -> Self {
return Self {
data: self.data * other.data,
};
}
fn __truediv__(&self, other: &Self) -> Self {
return Self {
data: self.data / other.data,
};
}
fn __floordiv__(&self, other: &Self) -> Self {
return Self {
data: self.data.floordiv(&other.data),
};
}
fn __repr__(&self) -> String {
return format!(
"Vector4_rs({}, {}, {}, {})",
self.data.x, self.data.y, self.data.z, self.data.w
);
}
} }
} }

View File

@ -0,0 +1,66 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
import random
import unittest
from libs.pyglet_rs import Vector2_rs, Vector3_rs, Vector4_rs
# 用于自动在测试运行前后输出测试信息的装饰器
def print_test_info(func):
def wrapper(*args, **kwargs):
print(f"{'=' * 20} {func.__name__} {'=' * 20}")
func(*args, **kwargs)
print(f"{'=' * 20} {func.__name__} {'=' * 20}")
return wrapper
class TestVector(unittest.TestCase):
@print_test_info
def test1_create_print_vector(self):
vec2 = Vector2_rs(1, 2)
vec3 = Vector3_rs(1, 2, 3)
vec4 = Vector4_rs(1, 2, 3, 4)
print(f"{vec2=}")
print(f"{vec3=}")
print(f"{vec4=}")
@print_test_info
def test2_calculate_vector(self):
vec2 = Vector2_rs(random.randint(1, 100), random.randint(1, 100))
vec3 = Vector3_rs(random.randint(1, 100), random.randint(1, 100), random.randint(1, 100))
vec4 = Vector4_rs(random.randint(1, 100), random.randint(1, 100), random.randint(1, 100), random.randint(1, 100))
vec2_1 = Vector2_rs(random.randint(1, 100), random.randint(1, 100))
vec3_1 = Vector3_rs(random.randint(1, 100), random.randint(1, 100), random.randint(1, 100))
vec4_1 = Vector4_rs(random.randint(1, 100), random.randint(1, 100), random.randint(1, 100), random.randint(1, 100))
print(f"{vec2=} {vec2_1=}")
print(f"{vec3=} {vec3_1=}")
print(f"{vec4=} {vec4_1=}")
print(f"{vec2 + vec2_1=}")
print(f"{vec3 + vec3_1=}")
print(f"{vec4 + vec4_1=}")
print(f"{vec2 - vec2_1=}")
print(f"{vec3 - vec3_1=}")
print(f"{vec4 - vec4_1=}")
print(f"{vec2 * vec2_1=}")
print(f"{vec3 * vec3_1=}")
print(f"{vec4 * vec4_1=}")
print(f"{vec2 / vec2_1=}")
print(f"{vec3 / vec3_1=}")
print(f"{vec4 / vec4_1=}")
print(f"{vec2 // vec2_1=}")
print(f"{vec3 // vec3_1=}")
print(f"{vec4 // vec4_1=}")