engine: merge tests for imagelib

This commit is contained in:
Alibek Omarov 2021-06-20 20:24:20 +03:00
parent 6ea25b8194
commit 91ee9bd32a
6 changed files with 104 additions and 37 deletions

View File

@ -581,6 +581,7 @@ fs_offset_t FS_FileLength( file_t *f );
//
#include "com_image.h"
void Image_Setup( void );
void Image_Init( void );
void Image_Shutdown( void );
void Image_AddCmdFlags( uint flags );

View File

@ -776,15 +776,19 @@ void Host_Userconfigd_f( void )
}
#if XASH_ENGINE_TESTS
static void Host_RunTests( void )
static void Host_RunTests( int stage )
{
memset( &tests_stats, 0, sizeof( tests_stats ));
Test_RunLibCommon();
Msg( "Done! %d passed, %d failed\n", tests_stats.passed, tests_stats.failed );
Sys_Quit();
switch( stage )
{
case 0: // early engine load
memset( &tests_stats, 0, sizeof( tests_stats ));
Test_RunLibCommon();
break;
case 1: // after FS load
Test_RunImagelib();
Msg( "Done! %d passed, %d failed\n", tests_stats.passed, tests_stats.failed );
Sys_Quit();
}
}
#endif
@ -923,7 +927,7 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha
#if XASH_ENGINE_TESTS
if( Sys_CheckParm( "-runtests" ))
Host_RunTests();
Host_RunTests( 0 );
#endif
Platform_Init();
@ -991,6 +995,11 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha
Image_Init();
Sound_Init();
#if XASH_ENGINE_TESTS
if( Sys_CheckParm( "-runtests" ))
Host_RunTests( 1 );
#endif
FS_LoadGameInfo( NULL );
Q_strncpy( host.gamefolder, GI->gamefolder, sizeof( host.gamefolder ));

View File

@ -491,3 +491,78 @@ rgbdata_t *FS_CopyImage( rgbdata_t *in )
return out;
}
#if XASH_ENGINE_TESTS
#include "tests.h"
static void GeneratePixel( byte *pix, uint i, uint j, uint w, uint h, qboolean genAlpha )
{
double x = ( j / (double)w ) - 0.5;
double y = ( i / (double)h ) - 0.5;
double d = sqrt( x * x + y * y );
pix[0] = (byte)(( sin( d * 30.0 ) + 1.0 ) * 126 );
pix[1] = (byte)(( sin( d * 27.723 ) + 1.0 ) * 126 );
pix[2] = (byte)(( sin( d * 42.41 ) + 1.0 ) * 126 );
pix[3] = genAlpha ? (byte)(( cos( d * 2.0 ) + 1.0 ) * 126 ) : 255;
}
static void Test_CheckImage( const char *name, rgbdata_t *rgb )
{
rgbdata_t *load;
// test reading
load = FS_LoadImage( name, NULL, 0 );
TASSERT( load->width == rgb->width )
TASSERT( load->height == rgb->height )
TASSERT( load->type == rgb->type )
TASSERT( ( load->flags & rgb->flags ) != 0 )
TASSERT( load->size == rgb->size )
TASSERT( memcmp(load->buffer, rgb->buffer, rgb->size ) == 0 )
Mem_Free( load );
}
void Test_RunImagelib( void )
{
rgbdata_t rgb = { 0 };
byte *buf;
const char *extensions[] = { "tga", "png", "bmp" };
uint i, j;
Image_Setup();
// generate image
rgb.width = 256;
rgb.height = 512;
rgb.type = PF_RGBA_32;
rgb.flags = IMAGE_HAS_ALPHA;
rgb.size = rgb.width * rgb.height * 4;
buf = rgb.buffer = Z_Malloc( rgb.size );
for( i = 0; i < rgb.height; i++ )
{
for( j = 0; j < rgb.width; j++ )
{
GeneratePixel( buf, i, j, rgb.width, rgb.height, true );
buf += 4;
}
}
for( i = 0; i < sizeof(extensions) / sizeof(extensions[0]); i++ )
{
const char *name = va( "test_gen.%s", extensions[i] );
// test saving
qboolean ret = FS_SaveImage( name, &rgb );
Con_Printf( "Checking if we can save images in '%s' format...\n", extensions[i] );
ASSERT(ret == true);
// test reading
Con_Printf( "Checking if we can read images in '%s' format...\n", extensions[i] );
Test_CheckImage( name, &rgb );
}
Z_Free( rgb.buffer );
}
#endif /* XASH_ENGINE_TESTS */

View File

@ -139,6 +139,13 @@ static const savepixformat_t save_game[] =
{ NULL, NULL, NULL }
};
void Image_Setup( void )
{
image.cmd_flags = IL_USE_LERPING|IL_ALLOW_OVERWRITE;
image.loadformats = load_game;
image.saveformats = save_game;
}
void Image_Init( void )
{
// init pools
@ -148,9 +155,7 @@ void Image_Init( void )
switch( host.type )
{
case HOST_NORMAL:
image.cmd_flags = IL_USE_LERPING|IL_ALLOW_OVERWRITE;
image.loadformats = load_game;
image.saveformats = save_game;
Image_Setup( );
break;
case HOST_DEDICATED:
image.cmd_flags = 0;

View File

@ -17,10 +17,11 @@ extern struct tests_stats_s tests_stats;
if(!( exp )) \
{ \
tests_stats.failed++; \
Msg( "assert failed at %s:%i\n", __FILE__, __LINE__ ) \
Msg( "assert failed at %s:%i\n", __FILE__, __LINE__ ); \
} \
else tests_stats.passed++;
void Test_RunImagelib( void );
void Test_RunLibCommon( void );
#endif

View File

@ -1,24 +0,0 @@
#include "unittest.h"
#include <math.h>
TEST_FIRST(helloworld)
{
}
TEST3(hw2, helloworld, "Hello, World")
{
}
TEST(nonsense, hw2)
{
if( !( sin( 0 ) != 0.0 ))
_self->status = 1;
}
TEST(sense, nonsense)
{
if( !( sin( 0 ) == 0.0 ) )
_self->status = 1;
}
IMPLEMENT_MAIN(sense, "self-testing")