|
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 |
}
|