mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-21 20:29:59 +01:00
Separate tests
This commit is contained in:
parent
5327bbc5c6
commit
ddbbfef456
3 changed files with 92 additions and 67 deletions
2
make.sh
2
make.sh
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
clear; clear; g++ -x c -fmax-errors=5 -pedantic -Wall -Wextra -o test raycastlib.c 2>&1 >/dev/null && ./test
|
clear; clear; g++ -x c -fmax-errors=5 -pedantic -Wall -Wextra -o test test.c 2>&1 >/dev/null && ./test
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
#ifndef RAYCASTLIB_H
|
||||||
|
#define RAYCASTLIB_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
author: Miloslav "drummyfish" Ciz
|
author: Miloslav "drummyfish" Ciz
|
||||||
|
@ -66,16 +68,6 @@ void castRayMultiHit(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// privates
|
// privates
|
||||||
|
|
||||||
#define logVector2D(v) printf("[%d,%d]\n",v.x,v.y)
|
|
||||||
#define logRay(r) printf("ray:\n");\
|
|
||||||
printf(" start: "); logVector2D(r.start);\
|
|
||||||
printf(" dir: "); logVector2D(r.direction);
|
|
||||||
#define logHitResult(h) printf("hit:\n");\
|
|
||||||
printf(" sqaure: "); logVector2D(h.square);\
|
|
||||||
printf(" pos: "); logVector2D(h.position);\
|
|
||||||
printf(" dist: %d", h.distance);\
|
|
||||||
printf(" texcoord: %d", h.textureCoord);
|
|
||||||
|
|
||||||
uint16_t sqrtInt(uint32_t value)
|
uint16_t sqrtInt(uint32_t value)
|
||||||
{
|
{
|
||||||
uint32_t result = 0;
|
uint32_t result = 0;
|
||||||
|
@ -250,58 +242,4 @@ HitResult castRay(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t testArrayFunc(int16_t x, int16_t y)
|
#endif
|
||||||
{
|
|
||||||
return (x < 0 || y < 0 || x > 9 || y > 9) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Simple automatic test function.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int testSingleRay(Unit startX, Unit startY, Unit dirX, Unit dirY,
|
|
||||||
int16_t expectSquareX, int16_t expectSquareY, int16_t expectPointX,
|
|
||||||
int16_t expectPointY, int16_t tolerateError)
|
|
||||||
{
|
|
||||||
Ray r;
|
|
||||||
|
|
||||||
r.start.x = startX;
|
|
||||||
r.start.y = startY;
|
|
||||||
r.direction.x = dirX;
|
|
||||||
r.direction.y = dirY;
|
|
||||||
|
|
||||||
HitResult h = castRay(r,testArrayFunc,20);
|
|
||||||
|
|
||||||
return
|
|
||||||
h.square.x == expectSquareX &&
|
|
||||||
h.square.y == expectSquareY &&
|
|
||||||
h.position.x <= expectPointX + tolerateError &&
|
|
||||||
h.position.x >= expectPointX - tolerateError &&
|
|
||||||
h.position.y <= expectPointY + tolerateError &&
|
|
||||||
h.position.y >= expectPointY - tolerateError;
|
|
||||||
}
|
|
||||||
|
|
||||||
int test()
|
|
||||||
{
|
|
||||||
if (!testSingleRay(
|
|
||||||
3 * UNITS_PER_SQUARE + UNITS_PER_SQUARE / 2,
|
|
||||||
4 * UNITS_PER_SQUARE + UNITS_PER_SQUARE / 2,
|
|
||||||
100, 50,
|
|
||||||
10, 7,
|
|
||||||
10240, 7936,
|
|
||||||
16))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
printf("%d\n",test());
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef logVector2D
|
|
||||||
#undef logRay
|
|
||||||
#undef logHitResult
|
|
87
test.c
Normal file
87
test.c
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include "raycastlib.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void logVector2D(Vector2D v)
|
||||||
|
{
|
||||||
|
printf("[%d,%d]\n",v.x,v.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void logRay(Ray r)
|
||||||
|
{
|
||||||
|
printf("ray:\n");
|
||||||
|
printf(" start: ");
|
||||||
|
logVector2D(r.start);
|
||||||
|
printf(" dir: ");
|
||||||
|
logVector2D(r.direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
void logHitResult(HitResult h)
|
||||||
|
{
|
||||||
|
printf("hit:\n");\
|
||||||
|
printf(" sqaure: ");
|
||||||
|
logVector2D(h.square);
|
||||||
|
printf(" pos: ");
|
||||||
|
logVector2D(h.position);
|
||||||
|
printf(" dist: %d", h.distance);
|
||||||
|
printf(" texcoord: %d", h.textureCoord);
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t testArrayFunc(int16_t x, int16_t y)
|
||||||
|
{
|
||||||
|
return (x < 0 || y < 0 || x > 9 || y > 9) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Simple automatic test function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int testSingleRay(Unit startX, Unit startY, Unit dirX, Unit dirY,
|
||||||
|
int16_t expectSquareX, int16_t expectSquareY, int16_t expectPointX,
|
||||||
|
int16_t expectPointY, int16_t tolerateError)
|
||||||
|
{
|
||||||
|
Ray r;
|
||||||
|
|
||||||
|
r.start.x = startX;
|
||||||
|
r.start.y = startY;
|
||||||
|
r.direction.x = dirX;
|
||||||
|
r.direction.y = dirY;
|
||||||
|
|
||||||
|
printf("- casting ray:\n");
|
||||||
|
logRay(r);
|
||||||
|
|
||||||
|
HitResult h = castRay(r,testArrayFunc,20);
|
||||||
|
|
||||||
|
printf("- result:\n");
|
||||||
|
logHitResult(h);
|
||||||
|
|
||||||
|
int result =
|
||||||
|
h.square.x == expectSquareX &&
|
||||||
|
h.square.y == expectSquareY &&
|
||||||
|
h.position.x <= expectPointX + tolerateError &&
|
||||||
|
h.position.x >= expectPointX - tolerateError &&
|
||||||
|
h.position.y <= expectPointY + tolerateError &&
|
||||||
|
h.position.y >= expectPointY - tolerateError;
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
printf("\nOK\n");
|
||||||
|
else
|
||||||
|
printf("\nFAIL\n");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("Testing raycastlib.\n");
|
||||||
|
|
||||||
|
if (!testSingleRay(
|
||||||
|
3 * UNITS_PER_SQUARE + UNITS_PER_SQUARE / 2,
|
||||||
|
4 * UNITS_PER_SQUARE + UNITS_PER_SQUARE / 2,
|
||||||
|
100, 50,
|
||||||
|
10, 7,
|
||||||
|
10240, 7936,
|
||||||
|
16))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue