libdgl/TEST/VECTOR2.C
Gered 62af8575c6 various updates i've left uncommitted for many months
- rename standard integer types to a more familiar (u)int(8/16/32)
- many function/struct renames. i don't _really_ know if what i've done
  for this is better, but it "feels" better to me. many draw/blit
  function names are shorter which is nice, at least. kinda important
  to me because i develop this on a real DOS machine in 80x50 text mode.
- add 'extern "C"' blocks to headers for C++ compiler usage
- draw/pixel color value arguments for functions should all have been
  changed to be uint8 instead of a full 32-bit int. feels right, but
  maybe should've left alone...
- small fix to keyboard handler. noticed a problem on one thinkpad
  laptop. was a result of what i think was a typo in a constant value
  used during the part of the interrupt handler that tells the keyboard
  controller the key event was processed
- fix uncommon potential crash function return in draw_filled_rect
- renamed low-level "direct" assembly functions to "lowlevel_xxx" to
  be a little bit more explicit about what they are
- add some convenience event helper functions for determining event
  types
- add fixed point atan2
- fixed some tabs/spaces inconsistences (should all be spaces now?)
- maybe some other minor things i've forgotten
2020-07-19 19:24:48 -04:00

135 lines
3.2 KiB
C
Executable file

#include "vector2.h"
#include "dglvec2.h"
#include "helpers.h"
void test_vec2i(void) {
VEC2I a, b, c;
int i;
c = vec2i(3, 7);
ASSERT(c.x == 3 && c.y == 7);
vec2i_set(&c, 1, 2);
ASSERT(c.x == 1 && c.y == 2);
a = vec2i(1, 2);
b = vec2i(1, 2);
ASSERT(vec2i_equals(a, b));
a = vec2i(3, 4);
b = vec2i(1, 2);
c = vec2i_add(a, b);
ASSERT(c.x == 4 && c.y == 6);
c = vec2i_sub(a, b);
ASSERT(c.x == 2 && c.y == 2);
c = vec2i_mul(a, b);
ASSERT(c.x == 3 && c.y == 8);
c = vec2i_muls(a, 2);
ASSERT(c.x == 6 && c.y == 8);
c = vec2i_div(a, b);
ASSERT(c.x == 3 && c.y == 2);
c = vec2i_divs(a, 2);
ASSERT(c.x == 1 && c.y == 2);
a = vec2i(1, 1);
b = vec2i(1, 3);
i = vec2i_distance(a, b);
ASSERT(i == 2);
i = vec2i_distancesq(a, b);
ASSERT(i == 4);
a = vec2i(-12, 16);
b = vec2i(12, 9);
i = vec2i_dot(a, b);
ASSERT(i == 0);
a = vec2i(-3, 0);
i = vec2i_length(a);
ASSERT(i == 3);
i = vec2i_lengthsq(a);
ASSERT(i == 9);
a = vec2i(5, 0);
b = vec2i(10, 0);
c = vec2i_lerp(a, b, 0.5f);
ASSERT(c.x == 7 && c.y == 0);
}
void test_vec2(void) {
VEC2 a, b, c;
fixed f;
c = vec2(FTOFIX(3.0f), FTOFIX(7.0f));
ASSERT(c.x == FTOFIX(3.0f) && c.y == FTOFIX(7.0f));
vec2_set(&c, FTOFIX(1.0f), FTOFIX(2.0f));
ASSERT(c.x == FTOFIX(1.0f) && c.y == FTOFIX(2.0f));
a = vec2(FTOFIX(1.0f), FTOFIX(2.0f));
b = vec2(FTOFIX(1.0f), FTOFIX(2.0f));
ASSERT(vec2_equals(a, b));
a = vec2(FTOFIX(3.0f), FTOFIX(4.0f));
b = vec2(FTOFIX(1.0f), FTOFIX(2.0f));
c = vec2_add(a, b);
ASSERT(c.x == FTOFIX(4.0f) && c.y == FTOFIX(6.0f));
c = vec2_sub(a, b);
ASSERT(c.x == FTOFIX(2.0f) && c.y == FTOFIX(2.0f));
c = vec2_mul(a, b);
ASSERT(c.x == FTOFIX(3.0f) && c.y == FTOFIX(8.0f));
c = vec2_muls(a, FTOFIX(0.5f));
ASSERT(c.x == FTOFIX(1.5f) && c.y == FTOFIX(2.0f));
c = vec2_div(a, b);
ASSERT(c.x == FTOFIX(3.0f) && c.y == FTOFIX(2.0f));
c = vec2_divs(a, FTOFIX(0.5f));
ASSERT(c.x == FTOFIX(6.0f) && c.y == FTOFIX(8.0f));
a = vec2(FTOFIX(1.0f), FTOFIX(1.0f));
b = vec2(FTOFIX(1.0f), FTOFIX(3.0f));
f = vec2_distance(a, b);
ASSERT(f == FTOFIX(2.0f));
f = vec2_distancesq(a, b);
ASSERT(f == FTOFIX(4.0f));
a = vec2(FTOFIX(-12.0f), FTOFIX(16.0f));
b = vec2(FTOFIX(12.0f), FTOFIX(9.0f));
f = vec2_dot(a, b);
ASSERT(f == 0);
a = vec2(FTOFIX(-3.0f), FTOFIX(0.0f));
f = vec2_length(a);
ASSERT(f == FTOFIX(3.0f));
f = vec2_lengthsq(a);
ASSERT(f == FTOFIX(9.0f));
a = vec2(FTOFIX(7.0f), FTOFIX(7.0f));
c = vec2_normalize(a);
ASSERT(c.x == FTOFIX(0.70710f) && c.y == FTOFIX(0.70710f));
a = vec2(FTOFIX(10.0f), FTOFIX(0.0f));
c = vec2_set_length(a, FTOFIX(2.0f));
ASSERT(c.x == FTOFIX(2.0f) && c.y == FTOFIX(0.0f));
a = vec2(FTOFIX(5.0f), FTOFIX(0.0f));
b = vec2(FTOFIX(10.0f), FTOFIX(0.0f));
c = vec2_lerp(a, b, FTOFIX(0.5f));
ASSERT(c.x == FTOFIX(7.5f) && c.y == FTOFIX(0.0f));
}