Browse Source

simplex: fix a bug in the modulo operator. lol. and add unit tests.

undefined
Sam Hocevar 10 years ago
parent
commit
0511d9836a
2 changed files with 27 additions and 1 deletions
  1. +2
    -1
      src/lol/math/simplex_interpolator.h
  2. +25
    -0
      src/t/math/simplex_interpolator.cpp

+ 2
- 1
src/lol/math/simplex_interpolator.h View File

@@ -83,7 +83,8 @@ protected:
inline int Mod(int value, int index) const
{
int const dim = this->m_samples.GetSize()[index];
return value % dim + (value >= 0 ? 0 : dim);
int const ret = value % dim;
return ret >= 0 ? ret : ret + dim;
}

inline void GetReference(vec_t<int, N> & floor_point, vec_t<T, N> & decimal_point, int & sign) const


+ 25
- 0
src/t/math/simplex_interpolator.cpp View File

@@ -23,6 +23,31 @@ lolunit_declare_fixture(SimplexInterpolatorTest)

void TearDown() {}

lolunit_declare_test(GridPoints2D1x1)
{
simplex_interpolator<2> s({{1.f}});
float val;

val = s.Interp(GridPoint2D(-1, -1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(0, -1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(1, -1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(-1, 0));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(0, 0));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(1, 0));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(-1, 1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(0, 1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
val = s.Interp(GridPoint2D(1, 1));
lolunit_assert_doubles_equal(1.f, val, 1e-5f);
}

lolunit_declare_test(GridPoints2D2x2)
{
simplex_interpolator<2> s({{1.f, 1.f}, {1.f, 2.f}});


Loading…
Cancel
Save