mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 15:53:55 -04:00
linmath: Backport round(), floor(), ceil() support for vectors
See #821
This commit is contained in:
parent
42d292ee17
commit
4e0e945279
@ -218,5 +218,63 @@ __ipow__(PyObject *self, FLOATTYPE exponent) {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase2)>::
|
||||||
|
__round__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase2) *vec = (FLOATNAME(LVecBase2) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase2));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::round(_this->_v(0));
|
||||||
|
vec->_v(1) = std::round(_this->_v(1));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase2)>::
|
||||||
|
__floor__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase2) *vec = (FLOATNAME(LVecBase2) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase2));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::floor(_this->_v(0));
|
||||||
|
vec->_v(1) = std::floor(_this->_v(1));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase2)>::
|
||||||
|
__ceil__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase2) *vec = (FLOATNAME(LVecBase2) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase2));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::ceil(_this->_v(0));
|
||||||
|
vec->_v(1) = std::ceil(_this->_v(1));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
#undef PYNUMBER_FLOATTYPE
|
#undef PYNUMBER_FLOATTYPE
|
||||||
#undef PY_AS_FLOATTYPE
|
#undef PY_AS_FLOATTYPE
|
||||||
|
@ -25,6 +25,10 @@ public:
|
|||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase2) __pow__(FLOATTYPE exponent) const;
|
INLINE_LINMATH FLOATNAME(LVecBase2) __pow__(FLOATTYPE exponent) const;
|
||||||
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
||||||
|
|
||||||
|
INLINE_LINMATH PyObject *__round__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__floor__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__ceil__(PyObject *self) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "lvecBase2_ext_src.I"
|
#include "lvecBase2_ext_src.I"
|
||||||
|
@ -136,6 +136,10 @@ PUBLISHED:
|
|||||||
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase2) __pow__(FLOATTYPE exponent) const);
|
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase2) __pow__(FLOATTYPE exponent) const);
|
||||||
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
||||||
|
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__round__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__floor__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__ceil__(PyObject *self));
|
||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase2) fmax(const FLOATNAME(LVecBase2) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase2) fmax(const FLOATNAME(LVecBase2) &other) const;
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase2) fmin(const FLOATNAME(LVecBase2) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase2) fmin(const FLOATNAME(LVecBase2) &other) const;
|
||||||
|
|
||||||
|
@ -221,5 +221,65 @@ __ipow__(PyObject *self, FLOATTYPE exponent) {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase3)>::
|
||||||
|
__round__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase3) *vec = (FLOATNAME(LVecBase3) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase3));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::round(_this->_v(0));
|
||||||
|
vec->_v(1) = std::round(_this->_v(1));
|
||||||
|
vec->_v(2) = std::round(_this->_v(2));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase3)>::
|
||||||
|
__floor__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase3) *vec = (FLOATNAME(LVecBase3) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase3));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::floor(_this->_v(0));
|
||||||
|
vec->_v(1) = std::floor(_this->_v(1));
|
||||||
|
vec->_v(2) = std::floor(_this->_v(2));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase3)>::
|
||||||
|
__ceil__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase3) *vec = (FLOATNAME(LVecBase3) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase3));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::ceil(_this->_v(0));
|
||||||
|
vec->_v(1) = std::ceil(_this->_v(1));
|
||||||
|
vec->_v(2) = std::ceil(_this->_v(2));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
#undef PYNUMBER_FLOATTYPE
|
#undef PYNUMBER_FLOATTYPE
|
||||||
#undef PY_AS_FLOATTYPE
|
#undef PY_AS_FLOATTYPE
|
||||||
|
@ -25,6 +25,10 @@ public:
|
|||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase3) __pow__(FLOATTYPE exponent) const;
|
INLINE_LINMATH FLOATNAME(LVecBase3) __pow__(FLOATTYPE exponent) const;
|
||||||
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
||||||
|
|
||||||
|
INLINE_LINMATH PyObject *__round__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__floor__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__ceil__(PyObject *self) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "lvecBase3_ext_src.I"
|
#include "lvecBase3_ext_src.I"
|
||||||
|
@ -155,6 +155,10 @@ PUBLISHED:
|
|||||||
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase3) __pow__(FLOATTYPE exponent) const);
|
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase3) __pow__(FLOATTYPE exponent) const);
|
||||||
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
||||||
|
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__round__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__floor__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__ceil__(PyObject *self));
|
||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase3) fmax(const FLOATNAME(LVecBase3) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase3) fmax(const FLOATNAME(LVecBase3) &other) const;
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase3) fmin(const FLOATNAME(LVecBase3) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase3) fmin(const FLOATNAME(LVecBase3) &other) const;
|
||||||
|
|
||||||
|
@ -229,5 +229,68 @@ __ipow__(PyObject *self, FLOATTYPE exponent) {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase4)>::
|
||||||
|
__round__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase4) *vec = (FLOATNAME(LVecBase4) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase4));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::round(_this->_v(0));
|
||||||
|
vec->_v(1) = std::round(_this->_v(1));
|
||||||
|
vec->_v(2) = std::round(_this->_v(2));
|
||||||
|
vec->_v(3) = std::round(_this->_v(3));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase4)>::
|
||||||
|
__floor__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase4) *vec = (FLOATNAME(LVecBase4) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase4));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::floor(_this->_v(0));
|
||||||
|
vec->_v(1) = std::floor(_this->_v(1));
|
||||||
|
vec->_v(2) = std::floor(_this->_v(2));
|
||||||
|
vec->_v(3) = std::floor(_this->_v(3));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase4)>::
|
||||||
|
__ceil__(PyObject *self) const {
|
||||||
|
#ifndef CPPPARSER
|
||||||
|
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||||
|
#endif
|
||||||
|
PyObject *py_vec = PyObject_CallNoArgs((PyObject *)DtoolInstance_TYPE(self));
|
||||||
|
if (py_vec != nullptr) {
|
||||||
|
FLOATNAME(LVecBase4) *vec = (FLOATNAME(LVecBase4) *)DtoolInstance_UPCAST(py_vec, FLOATNAME(Dtool_LVecBase4));
|
||||||
|
nassertr(vec != nullptr, nullptr);
|
||||||
|
|
||||||
|
vec->_v(0) = std::ceil(_this->_v(0));
|
||||||
|
vec->_v(1) = std::ceil(_this->_v(1));
|
||||||
|
vec->_v(2) = std::ceil(_this->_v(2));
|
||||||
|
vec->_v(3) = std::ceil(_this->_v(3));
|
||||||
|
}
|
||||||
|
return py_vec;
|
||||||
|
}
|
||||||
|
|
||||||
#undef PYNUMBER_FLOATTYPE
|
#undef PYNUMBER_FLOATTYPE
|
||||||
#undef PY_AS_FLOATTYPE
|
#undef PY_AS_FLOATTYPE
|
||||||
|
@ -25,6 +25,10 @@ public:
|
|||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase4) __pow__(FLOATTYPE exponent) const;
|
INLINE_LINMATH FLOATNAME(LVecBase4) __pow__(FLOATTYPE exponent) const;
|
||||||
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent);
|
||||||
|
|
||||||
|
INLINE_LINMATH PyObject *__round__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__floor__(PyObject *self) const;
|
||||||
|
INLINE_LINMATH PyObject *__ceil__(PyObject *self) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "lvecBase4_ext_src.I"
|
#include "lvecBase4_ext_src.I"
|
||||||
|
@ -163,6 +163,10 @@ PUBLISHED:
|
|||||||
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase4) __pow__(FLOATTYPE exponent) const);
|
EXTENSION(INLINE_LINMATH FLOATNAME(LVecBase4) __pow__(FLOATTYPE exponent) const);
|
||||||
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
EXTENSION(INLINE_LINMATH PyObject *__ipow__(PyObject *self, FLOATTYPE exponent));
|
||||||
|
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__round__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__floor__(PyObject *self));
|
||||||
|
EXTENSION(INLINE_LINMATH PyObject *__ceil__(PyObject *self));
|
||||||
|
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase4) fmax(const FLOATNAME(LVecBase4) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase4) fmax(const FLOATNAME(LVecBase4) &other) const;
|
||||||
INLINE_LINMATH FLOATNAME(LVecBase4) fmin(const FLOATNAME(LVecBase4) &other) const;
|
INLINE_LINMATH FLOATNAME(LVecBase4) fmin(const FLOATNAME(LVecBase4) &other) const;
|
||||||
|
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
from math import floor, ceil
|
||||||
|
import sys
|
||||||
|
|
||||||
from panda3d.core import Vec2, Vec3, Vec4, Vec2F, Vec2D
|
from panda3d.core import Vec2, Vec3, Vec4, Vec2F, Vec2D
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_vec2_creation():
|
def test_vec2_creation():
|
||||||
@ -90,3 +94,30 @@ def test_vec2_nan():
|
|||||||
assert not Vec2D(inf, 0).is_nan()
|
assert not Vec2D(inf, 0).is_nan()
|
||||||
assert not Vec2D(inf, inf).is_nan()
|
assert not Vec2D(inf, inf).is_nan()
|
||||||
assert not Vec2D(-inf, 0).is_nan()
|
assert not Vec2D(-inf, 0).is_nan()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec2_round():
|
||||||
|
original_vector = Vec2(2.3, -2.6)
|
||||||
|
|
||||||
|
rounded_vector = round(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec2_floor():
|
||||||
|
original_vector = Vec2(2.3, -2.6)
|
||||||
|
|
||||||
|
rounded_vector = floor(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec2_ceil():
|
||||||
|
original_vector = Vec2(2.3, -2.6)
|
||||||
|
|
||||||
|
rounded_vector = ceil(original_vector)
|
||||||
|
assert rounded_vector.x == 3
|
||||||
|
assert rounded_vector.y == -2
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
from math import floor, ceil
|
||||||
|
import sys
|
||||||
|
|
||||||
from panda3d.core import Vec2, Vec3, Vec3F, Vec3D
|
from panda3d.core import Vec2, Vec3, Vec3F, Vec3D
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_vec3_creation():
|
def test_vec3_creation():
|
||||||
@ -72,3 +76,33 @@ def test_vec3_compare():
|
|||||||
assert Vec3(0, 0, 1).compare_to(Vec3(1, 0, 0)) == -1
|
assert Vec3(0, 0, 1).compare_to(Vec3(1, 0, 0)) == -1
|
||||||
assert Vec3(0, 0, 1).compare_to(Vec3(0, 1, 0)) == -1
|
assert Vec3(0, 0, 1).compare_to(Vec3(0, 1, 0)) == -1
|
||||||
assert Vec3(0, 0, 1).compare_to(Vec3(0, 0, 1)) == 0
|
assert Vec3(0, 0, 1).compare_to(Vec3(0, 0, 1)) == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec3_round():
|
||||||
|
original_vector = Vec3(2.3, -2.6, 3.5)
|
||||||
|
|
||||||
|
rounded_vector = round(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
assert rounded_vector.z == 4
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec3_floor():
|
||||||
|
original_vector = Vec3(2.3, -2.6, 3.5)
|
||||||
|
|
||||||
|
rounded_vector = floor(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
assert rounded_vector.z == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec3_ceil():
|
||||||
|
original_vector = Vec3(2.3, -2.6, 3.5)
|
||||||
|
|
||||||
|
rounded_vector = ceil(original_vector)
|
||||||
|
assert rounded_vector.x == 3
|
||||||
|
assert rounded_vector.y == -2
|
||||||
|
assert rounded_vector.z == 4
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
|
from math import floor, ceil
|
||||||
|
import sys
|
||||||
|
|
||||||
from panda3d.core import Vec2, Vec3, Vec4, Vec4F, Vec4D
|
from panda3d.core import Vec2, Vec3, Vec4, Vec4F, Vec4D
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_vec4_creation():
|
def test_vec4_creation():
|
||||||
@ -85,3 +89,36 @@ def test_vec4_compare():
|
|||||||
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 1, 0, 0)) == -1
|
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 1, 0, 0)) == -1
|
||||||
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 0, 1, 0)) == -1
|
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 0, 1, 0)) == -1
|
||||||
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 0, 0, 1)) == 0
|
assert Vec4(0, 0, 0, 1).compare_to(Vec4(0, 0, 0, 1)) == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec4_round():
|
||||||
|
original_vector = Vec4(2.3, -2.6, 3.5, 1)
|
||||||
|
|
||||||
|
rounded_vector = round(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
assert rounded_vector.z == 4
|
||||||
|
assert rounded_vector.w == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec4_floor():
|
||||||
|
original_vector = Vec4(2.3, -2.6, 3.5, 1)
|
||||||
|
|
||||||
|
rounded_vector = floor(original_vector)
|
||||||
|
assert rounded_vector.x == 2
|
||||||
|
assert rounded_vector.y == -3
|
||||||
|
assert rounded_vector.z == 3
|
||||||
|
assert rounded_vector.w == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 0), reason="requires Python 3")
|
||||||
|
def test_vec4_ceil():
|
||||||
|
original_vector = Vec4(2.3, -2.6, 3.5, 1)
|
||||||
|
|
||||||
|
rounded_vector = ceil(original_vector)
|
||||||
|
assert rounded_vector.x == 3
|
||||||
|
assert rounded_vector.y == -2
|
||||||
|
assert rounded_vector.z == 4
|
||||||
|
assert rounded_vector.w == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user