Blame ETL/test/surface.cpp

darco b3016b
/*! ========================================================================
darco b3016b
** Extended Template and Library Test Suite
darco b3016b
** Surface Class Test
dooglus 36d01e
** $Id$
darco b3016b
**
darco b3016b
** Copyright (c) 2002 Robert B. Quattlebaum Jr.
darco b3016b
**
darco b3016b
** This package is free software; you can redistribute it and/or
darco b3016b
** modify it under the terms of the GNU General Public License as
darco b3016b
** published by the Free Software Foundation; either version 2 of
darco b3016b
** the License, or (at your option) any later version.
darco b3016b
**
darco b3016b
** This package is distributed in the hope that it will be useful,
darco b3016b
** but WITHOUT ANY WARRANTY; without even the implied warranty of
darco b3016b
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
darco b3016b
** General Public License for more details.
darco b3016b
**
darco b3016b
** === N O T E S ===========================================================
darco b3016b
**
darco b3016b
** ========================================================================= */
darco b3016b
darco b3016b
/* === H E A D E R S ======================================================= */
darco b3016b
darco b3016b
#include <iostream></iostream>
darco b3016b
#include <etl surface=""></etl>
darco b3016b
#include <etl gaussian=""></etl>
darco b3016b
#include <cstdio></cstdio>
darco b3016b
darco b3016b
/* === M A C R O S ========================================================= */
darco b3016b
darco b3016b
using namespace etl;
darco b3016b
using namespace std;
darco b3016b
darco b3016b
/* === C L A S S E S ======================================================= */
darco b3016b
darco b3016b
darco b3016b
/* === P R O C E D U R E S ================================================= */
darco b3016b
darco b3016b
int display_pen(generic_pen<float> pen, int w, int h)</float>
darco b3016b
{
darco b3016b
	int ret=0;
darco b3016b
	int x, y;
darco b3016b
	// print out the after pic
darco b3016b
	for(y=0;y
darco b3016b
	{
darco b3016b
		printf("|");
darco b3016b
		for(x=0;x
darco b3016b
		{
darco b3016b
			if(pen.get_value()>=2.0f)
darco b3016b
				printf("#");
darco b3016b
			else if(pen.get_value()>=1.0f)
darco b3016b
				printf("@");
darco b3016b
			else if(pen.get_value()>=0.8f)
darco b3016b
				printf("%%");
darco b3016b
			else if(pen.get_value()>=0.6f)
darco b3016b
				printf("O");
darco b3016b
			else if(pen.get_value()>=0.4f)
darco b3016b
				printf(":");
darco b3016b
			else if(pen.get_value()>=0.2f)
darco b3016b
				printf(".");
darco b3016b
			else if(pen.get_value()>=-0.1f)
darco b3016b
				printf(" ");
darco b3016b
			else
darco b3016b
				printf("X"),ret++;
darco b3016b
		}
darco b3016b
		pen.dec_x(x);
darco b3016b
		printf("|\n");
darco b3016b
	}
darco b3016b
	pen.dec_y(y);
darco b3016b
	return ret;
darco b3016b
}
darco b3016b
darco b3016b
void make_pattern(generic_pen<float> pen, int w, int h)</float>
darco b3016b
{
darco b3016b
	int x,y;
darco b3016b
	for(y=0;y
darco b3016b
	{
darco b3016b
		for(x=0;x
darco b3016b
		{
pabs3 6d6033
			if( (x-y<=1 && y-x<=1) || y==h/2 || x==w/2)
darco b3016b
				pen.put_value(2);
darco b3016b
			else
darco b3016b
				pen.put_value(0);
darco b3016b
		}
darco b3016b
		pen.dec_x(x);
darco b3016b
	}
darco b3016b
	pen.dec_y(y);
darco b3016b
}
darco b3016b
darco b3016b
int basic_test()
darco b3016b
{
darco b3016b
	printf("Surface:basic_test(): Running...\n");
dooglus cee594
darco b3016b
	int ret=0;
darco b3016b
darco b3016b
	surface<float> my_surface(100,100);</float>
darco b3016b
darco b3016b
	gaussian_blur(my_surface.begin(),my_surface.end(),10,10);
darco b3016b
darco b3016b
	surface<float> my_surface2(my_surface);</float>
darco b3016b
darco b3016b
	my_surface2.fill(0.5);
darco b3016b
	my_surface2.clear();
darco b3016b
darco b3016b
	my_surface2=my_surface;
darco b3016b
darco b3016b
	my_surface2.fill(0.5);
darco b3016b
	my_surface2.clear();
darco b3016b
darco b3016b
	my_surface.fill(0.5);
darco b3016b
	my_surface.clear();
darco b3016b
darco b3016b
	surface<float> my_surface3;</float>
darco b3016b
	my_surface3.mirror(my_surface2);
darco b3016b
darco b3016b
	my_surface3.fill(0.5);
darco b3016b
	my_surface3.clear();
darco b3016b
darco b3016b
	my_surface3=my_surface;
darco b3016b
darco b3016b
	my_surface3.mirror(my_surface);
darco b3016b
darco b3016b
	printf("Surface:basic_test(): %d errors.\n",ret);
darco b3016b
darco b3016b
	return ret;
darco b3016b
}
darco b3016b
darco b3016b
int linear_sample_test()
darco b3016b
{
darco b3016b
	printf("Surface:linear_sample_test(): Running...\n");
darco b3016b
darco b3016b
	int ret=0;
darco b3016b
darco b3016b
	surface<float> my_surface(16,16);</float>
dooglus cee594
darco b3016b
	my_surface.fill(0.0f);
dooglus cee594
darco b3016b
	make_pattern(my_surface.begin(),my_surface.get_w(),my_surface.get_h());
darco b3016b
darco b3016b
	int extra(5);
darco b3016b
	surface<float> dest(18+extra*2,18+extra*2);</float>
dooglus cee594
darco b3016b
	int x,y;
darco b3016b
	for(x=-extra;x
darco b3016b
		for(y=-extra;y
darco b3016b
		{
darco b3016b
			dest[y+extra][x+extra]=my_surface.linear_sample(
darco b3016b
				float(x)/float(dest.get_w()-1-extra*2)*float(my_surface.get_w()-1),
darco b3016b
				float(y)/float(dest.get_h()-1-extra*2)*float(my_surface.get_h()-1)
darco b3016b
			);
darco b3016b
		}
darco b3016b
darco b3016b
	display_pen(dest.begin(),dest.get_w(),dest.get_h());
dooglus cee594
darco b3016b
	printf("Surface:linear_sample_test(): %d errors.\n",ret);
darco b3016b
darco b3016b
	return ret;
darco b3016b
}
darco b3016b
darco b3016b
int cubic_sample_test()
darco b3016b
{
darco b3016b
	printf("Surface:cubic_sample_test(): Running...\n");
darco b3016b
darco b3016b
	int ret=0;
darco b3016b
darco b3016b
	surface<float> my_surface(16,16);</float>
dooglus cee594
darco b3016b
	my_surface.fill(0.0f);
dooglus cee594
darco b3016b
	make_pattern(my_surface.begin(),my_surface.get_w(),my_surface.get_h());
darco b3016b
darco b3016b
	{
darco b3016b
		surface<float> dest(24,24);</float>
dooglus cee594
darco b3016b
		int x,y;
darco b3016b
		for(x=0;x
darco b3016b
			for(y=0;y
darco b3016b
			{
darco b3016b
				dest[y][x]=my_surface.cubic_sample(
darco b3016b
					float(x)/float(dest.get_w()-1)*float(my_surface.get_w()-1),
darco b3016b
					float(y)/float(dest.get_h()-1)*float(my_surface.get_h()-1)
darco b3016b
				);
darco b3016b
			}
dooglus cee594
darco b3016b
		display_pen(dest.begin(),dest.get_w(),dest.get_h());
darco b3016b
	}
darco b3016b
darco b3016b
	display_pen(my_surface.begin(),my_surface.get_w(),my_surface.get_h());
darco b3016b
	{
darco b3016b
		surface<float> dest(16,16);</float>
dooglus cee594
darco b3016b
		int x,y;
darco b3016b
		for(x=0;x
darco b3016b
			for(y=0;y
darco b3016b
			{
darco b3016b
				dest[y][x]=my_surface.cubic_sample(
darco b3016b
					float(x)/float(dest.get_w()-1)*float(my_surface.get_w()-1),
darco b3016b
					float(y)/float(dest.get_h()-1)*float(my_surface.get_h()-1)
darco b3016b
				);
darco b3016b
			}
dooglus cee594
darco b3016b
		display_pen(dest.begin(),dest.get_w(),dest.get_h());
darco b3016b
	}
dooglus cee594
darco b3016b
	printf("Surface:cubic_sample_test(): %d errors.\n",ret);
darco b3016b
darco b3016b
	return ret;
darco b3016b
}
darco b3016b
darco b3016b
/* === E N T R Y P O I N T ================================================= */
darco b3016b
darco b3016b
int main()
darco b3016b
{
darco b3016b
	int error=0;
dooglus cee594
darco b3016b
	error+=basic_test();
darco b3016b
	error+=linear_sample_test();
darco b3016b
	error+=cubic_sample_test();
darco b3016b
darco b3016b
	return error;
darco b3016b
}