|
darco |
b3016b |
/*! ========================================================================
|
|
darco |
b3016b |
** Extended Template and Library Test Suite
|
|
darco |
b3016b |
** Handle Template 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 <list></list>
|
|
darco |
b3016b |
#include <cstdio></cstdio>
|
|
darco |
b3016b |
#include <cstdlib></cstdlib>
|
|
darco |
b3016b |
#include <string></string>
|
|
darco |
b3016b |
#include <utility></utility>
|
|
darco |
b3016b |
#include <memory></memory>
|
|
darco |
b3016b |
#include <map></map>
|
|
darco |
b3016b |
#include <etl pen=""></etl>
|
|
darco |
b3016b |
#include <etl boxblur=""></etl>
|
|
darco |
b3016b |
//#include <etl gaussian=""></etl>
|
|
caryoscelus |
77c779 |
#include <cmath></cmath>
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === M A C R O S ========================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
using namespace std;
|
|
darco |
b3016b |
using namespace etl;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === C L A S S E S ======================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int generic_pen_test(int w, int h)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("generic_pen(w:%d,h:%d): ",w,h);
|
|
darco |
b3016b |
|
|
|
c0fcc1 |
auto_ptr<float> data(new float[w*h]);</float>
|
|
|
c0fcc1 |
//unique_ptr<float> data(new float[w*h]);</float>
|
|
darco |
b3016b |
if(!data.get())
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("Um..... malloc failure on line %d of " __FILE__ "...\n", __LINE__);
|
|
darco |
b3016b |
abort();
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
generic_pen<float> pen(data.get(),w,h);</float>
|
|
darco |
b3016b |
generic_pen<float> pen2;</float>
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(!pen)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: On pen bool test\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(&pen.x()[2]!=&pen[0][2])
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: On request for horizontal iterator\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(&pen.y()[2]!=&pen[2][0])
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: On request for vertical iterator\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
pen.move(1,1);
|
|
darco |
b3016b |
pen2=pen;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(pen!=pen2)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: On pen assignment or pen comparison\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
pen2.move(w,h);
|
|
darco |
b3016b |
generic_pen<float>::difference_type diff(pen2-pen);</float>
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(diff.x!=w || diff.y!=h)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: pen difference inconsistency ([%d,%d]!=[%d,%d])\n", __LINE__, diff.x, diff.y, w, h);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(pen.end_x()-pen.x()!=w-1)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: iterator_x inconsistency (%ld!=%d)\n", __LINE__, pen.end_x()-pen.x(), w);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(pen.end_y()-pen.y()!=h-1)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: iterator_y inconsistency (%d!=%d)\n", __LINE__, pen.end_y()-pen.y(), h);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(&pen.end_y()[-1]!=&pen.y()[(h-2)])
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: iterator_y inconsistency\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(&pen.end_x()[-1]!=&pen.x()[(w-2)])
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: iterator_x inconsistency\n", __LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
printf("PASSED\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
return 0;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int alpha_pen_test(void)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("alpha_pen: ");
|
|
darco |
b3016b |
printf("SKIPPED\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
return 0;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int bbox_pen_test(void)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("bbox_pen: ");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("SKIPPED\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
return 0;
|
|
darco |
b3016b |
}
|
|
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.0001f)
|
|
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 |
int display_pen(generic_pen<double> pen, int w, int h)</double>
|
|
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.0001f)
|
|
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 emptyfunction(int v)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
static int stupid = 0;
|
|
darco |
b3016b |
stupid = v;
|
|
|
fce3e7 |
if (stupid == 0) return; // disable unused warning
|
|
darco |
b3016b |
//printf("Called... %d\n",v);
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int box_blur_test(void)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
typedef float boxblur_float;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("box_blur: ");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int w=25,h=25;
|
|
darco |
b3016b |
|
|
|
c0fcc1 |
//unique_ptr<boxblur_float> data(new boxblur_float[w*h]);</boxblur_float>
|
|
|
c0fcc1 |
//unique_ptr<boxblur_float> data2(new boxblur_float[w*h]);</boxblur_float>
|
|
|
c0fcc1 |
auto_ptr<boxblur_float> data(new boxblur_float[w*h]);</boxblur_float>
|
|
|
c0fcc1 |
auto_ptr<boxblur_float> data2(new boxblur_float[w*h]);</boxblur_float>
|
|
darco |
b3016b |
if(!data.get())
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("Um..... malloc failure on line %d of " __FILE__ "...\n", __LINE__);
|
|
darco |
b3016b |
abort();
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
generic_pen<boxblur_float> pen(data.get(),w,h);</boxblur_float>
|
|
darco |
b3016b |
generic_pen<boxblur_float> pen2;</boxblur_float>
|
|
darco |
b3016b |
|
|
darco |
b3016b |
generic_pen<boxblur_float> pen3(data2.get(),w,h);</boxblur_float>
|
|
darco |
b3016b |
int x,y;
|
|
darco |
b3016b |
|
|
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 |
int bad_values=0;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("\nBEFORE BOX BLUR:\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
// print out the before pic
|
|
darco |
b3016b |
display_pen(pen,w,h);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
// Pen 2 will be the end
|
|
darco |
b3016b |
pen2=pen;
|
|
darco |
b3016b |
pen2.move(w,h);
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//temporary
|
|
darco |
b3016b |
vbox_blur(pen,pen2,2,pen3);
|
|
darco |
b3016b |
printf("\n VBLUR ONLY:\n");
|
|
darco |
b3016b |
display_pen(pen3,w,h);
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
// box_blur(pen,w,h,4);
|
|
darco |
b3016b |
hbox_blur(pen,pen2,2,pen3);
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
printf("\n HBLUR ONLY:\n");
|
|
darco |
b3016b |
display_pen(pen3,w,h);
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
pen2=pen3;
|
|
darco |
b3016b |
pen2.move(w,h);
|
|
darco |
b3016b |
vbox_blur(pen3,pen2,2,pen);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("\nAFTER BOX BLUR:\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
// print out the after pic
|
|
darco |
b3016b |
bad_values=display_pen(pen,w,h);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(bad_values)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: blur result contained %d bad values\n", __LINE__, bad_values);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
boxblur_float max=0;
|
|
darco |
b3016b |
printf("CHECK BOXBLUR RESULTS %d,%d:\n",pen.diff_begin().x, pen.diff_begin().y);
|
|
darco |
b3016b |
for(y=0;y
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
for(x=0;x
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
boxblur_float f = 0;
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
for(int oy=-2; oy <= 2; ++oy)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
int iy = y+oy;
|
|
darco |
b3016b |
if(iy < 0) iy = 0;
|
|
darco |
b3016b |
if(iy >= h) iy = h-1;
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
for(int ox=-2; ox <= 2; ++ox)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
int ix = x+ox;
|
|
darco |
b3016b |
if(ix < 0) ix = 0;
|
|
darco |
b3016b |
if(ix >= w) ix = w-1;
|
|
dooglus |
cee594 |
|
|
pabs3 |
6d6033 |
if( (ix-iy<=1 && iy-ix<=1) || iy==h/2 || ix==w/2)
|
|
darco |
b3016b |
f += 2;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
}
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//print out if the relative error is high
|
|
darco |
b3016b |
/*f /= 25;
|
|
darco |
b3016b |
float rf = pen.get_value() - f/25;
|
|
darco |
b3016b |
if(f && rf > 0.3)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("pixel (%d,%d) off by %f\n",x,y,rf);
|
|
darco |
b3016b |
}*/
|
|
darco |
b3016b |
boxblur_float diff = fabs(pen.get_value() - f/25);
|
|
darco |
b3016b |
if(diff > max) max = diff;
|
|
darco |
b3016b |
pen.put_value(f/25); //if length = 2 then dim = 5.. area = 25
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_x(x);
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_y(y);
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
/*if(max)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
for(y=0;y
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
for(x=0;x
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
pen.put_value(pen.get_value()/max);
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_x(x);
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_y(y);
|
|
darco |
b3016b |
}*/
|
|
darco |
b3016b |
|
|
darco |
b3016b |
//printf("\nHBOXBLUR ERROR (max = %e):\n",max);
|
|
darco |
b3016b |
printf("\nCorrect results:\n");
|
|
darco |
b3016b |
display_pen(pen,w,h);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("PASSED\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
return 0;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/*
|
|
darco |
b3016b |
float:
|
|
darco |
b3016b |
|@@%O. ::::: |
|
|
darco |
b3016b |
|@@@%:. ::::: |
|
|
darco |
b3016b |
|%@@%O:. ::::: |
|
|
darco |
b3016b |
|O%%@%O:. ::::: |
|
|
darco |
b3016b |
|.:O%@%O:. ::::: |
|
|
darco |
b3016b |
| .:O%@%O:.::::: |
|
|
darco |
b3016b |
| .:O%@%O:O:::: |
|
|
darco |
b3016b |
| .:O%@%O%O::: |
|
|
darco |
b3016b |
| .:O%@%@%O:: |
|
|
darco |
b3016b |
| .:O%@@@%:: |
|
|
darco |
b3016b |
|::.:::O%@@@@@%O::::::::::|
|
|
darco |
b3016b |
|::.::::O%@@@@@%::::::::::|
|
|
darco |
b3016b |
|::.:::::OO@@@@@%O::::::::|
|
|
darco |
b3016b |
|::.:::::::%@@@@@%O:::::::|
|
|
darco |
b3016b |
|::.::::::.O%@@@@@%O::::::|
|
|
darco |
b3016b |
| ::%@@@%O:. |
|
|
darco |
b3016b |
| ::O%@%@%O:. |
|
|
darco |
b3016b |
| :.:O%O%@%O:. |
|
|
darco |
b3016b |
| :.::O:O%@%O:. |
|
|
darco |
b3016b |
| :.:.:.:O%@%O:. |
|
|
darco |
b3016b |
| :.:.: .:O%@%O:.|
|
|
darco |
b3016b |
| :.:.: .:O%@%%O|
|
|
darco |
b3016b |
| :.:.: .:O%@@%|
|
|
darco |
b3016b |
| :.:.: .:%@@@|
|
|
darco |
b3016b |
| :.:.: .O%@@|
|
|
darco |
b3016b |
|
|
darco |
b3016b |
double:
|
|
darco |
b3016b |
|@@%O. ..... |
|
|
darco |
b3016b |
|@@@O:. ..... |
|
|
darco |
b3016b |
|%@@%O:. ..... |
|
|
darco |
b3016b |
|OO%@%O:. ..... |
|
|
darco |
b3016b |
|.:O%@%O:. ..... |
|
|
darco |
b3016b |
| .:O%@%O:.:.... |
|
|
darco |
b3016b |
| .:O%@%O:O:... |
|
|
darco |
b3016b |
| .:O%@%O%O:.. |
|
|
darco |
b3016b |
| .:O%@%@%O:. |
|
|
darco |
b3016b |
| .:O%@@@O:. |
|
|
darco |
b3016b |
|.....:O%@@@@@%O..........|
|
|
darco |
b3016b |
|......:O%@@@@@%::........|
|
|
darco |
b3016b |
|.......:OO@@@@@OO:.......|
|
|
darco |
b3016b |
|........::%@@@@@%O:......|
|
|
darco |
b3016b |
|..........O%@@@@@%O:.....|
|
|
darco |
b3016b |
| .:O@@@%O:. |
|
|
darco |
b3016b |
| .:O%@%@%O:. |
|
|
darco |
b3016b |
| ..:O%O%@%O:. |
|
|
darco |
b3016b |
| ...:O:O%@%O:. |
|
|
darco |
b3016b |
| ....:.:O%@%O:. |
|
|
darco |
b3016b |
| ..... .:O%@%O:.|
|
|
darco |
b3016b |
| ..... .:O%@%OO|
|
|
darco |
b3016b |
| ..... .:O%@@%|
|
|
darco |
b3016b |
| ..... .:O@@@|
|
|
darco |
b3016b |
| ..... .O%@@|
|
|
darco |
b3016b |
|
|
darco |
b3016b |
|
|
darco |
b3016b |
*/
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int gaussian_blur_test(void)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("gaussian_blur: ");
|
|
darco |
b3016b |
#if 0
|
|
darco |
b3016b |
int w=25,h=25;
|
|
darco |
b3016b |
int bad_values=0;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
auto_ptr<float> data(new float[w*h]);</float>
|
|
darco |
b3016b |
if(!data.get())
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("Um..... malloc failure on line %d of " __FILE__ "...\n",__LINE__);
|
|
darco |
b3016b |
abort();
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
|
|
darco |
b3016b |
generic_pen<float> pen(data.get(),w,h);</float>
|
|
darco |
b3016b |
generic_pen<float> pen2;</float>
|
|
darco |
b3016b |
int x,y;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
for(y=0;y
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
for(x=0;x
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
if((x-y<=1 && y-x<=1) || y==h/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 |
printf("\nBEFORE GAUSSIAN BLUR:\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
// print out the before 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.0f)
|
|
darco |
b3016b |
printf(" ");
|
|
darco |
b3016b |
else
|
|
darco |
b3016b |
printf("X"),bad_values++;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_x(x);
|
|
darco |
b3016b |
printf("|\n");
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_y(y);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
// Pen 2 will be the end
|
|
darco |
b3016b |
pen2=pen;
|
|
darco |
b3016b |
pen2.move(w,h);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
#if 0
|
|
darco |
b3016b |
gaussian_blur_5x5(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_5x5(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_5x5(pen,pen2);
|
|
darco |
b3016b |
#endif
|
|
darco |
b3016b |
|
|
darco |
b3016b |
#if 0
|
|
darco |
b3016b |
gaussian_blur_3x3(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_3x3(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_3x3(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_3x3(pen,pen2);
|
|
darco |
b3016b |
gaussian_blur_3x3(pen,pen2);
|
|
darco |
b3016b |
#endif
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
// gaussian_blur(pen,pen2,15);
|
|
darco |
b3016b |
gaussian_blur(pen,pen2,10,10);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
printf("\nAFTER GAUSSIAN BLUR:\n");
|
|
darco |
b3016b |
|
|
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.0f)
|
|
darco |
b3016b |
printf(" ");
|
|
darco |
b3016b |
else
|
|
darco |
b3016b |
printf("X"),bad_values++;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_x(x);
|
|
darco |
b3016b |
printf("|\n");
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
pen.dec_y(y);
|
|
darco |
b3016b |
|
|
darco |
b3016b |
if(bad_values)
|
|
darco |
b3016b |
{
|
|
= |
cd1e3b |
printf("FAILURE! " __FILE__ "@%d: blur result contained bad values\n",__LINE__);
|
|
darco |
b3016b |
return 1;
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
#endif
|
|
darco |
b3016b |
printf("PASSED\n");
|
|
darco |
b3016b |
|
|
darco |
b3016b |
return 0;
|
|
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;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
error+=generic_pen_test(40,40);
|
|
darco |
b3016b |
error+=generic_pen_test(10,40);
|
|
darco |
b3016b |
error+=generic_pen_test(40,10);
|
|
darco |
b3016b |
if(error)return error;
|
|
darco |
b3016b |
error+=alpha_pen_test();
|
|
darco |
b3016b |
error+=bbox_pen_test();
|
|
darco |
b3016b |
error+=box_blur_test();
|
|
darco |
b3016b |
if(error)return error;
|
|
darco |
b3016b |
error+=gaussian_blur_test();
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
return error;
|
|
darco |
b3016b |
}
|