|
darco |
b3016b |
/*! ========================================================================
|
|
darco |
b3016b |
** Extended Template and Library Test Suite
|
|
darco |
b3016b |
** Generic Value Test
|
|
dooglus |
36d01e |
** $Id$
|
|
darco |
b3016b |
**
|
|
darco |
b3016b |
** Copyright (c) 2002 Adrian Bentley
|
|
Carlos Lopez |
42fd7a |
** Copyright (c) 2010 Nikita Kitaev
|
|
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 <etl value=""></etl>
|
|
darco |
b3016b |
#include <stdio.h></stdio.h>
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === M A C R O S ========================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
using namespace etl;
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === C L A S S E S ======================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === P R O C E D U R E S ================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
/* === E N T R Y P O I N T ================================================= */
|
|
darco |
b3016b |
|
|
darco |
b3016b |
struct stupidv
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
float x,y;
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
stupidv(float xin=0, float yin=0) :x(xin),y(yin) {}
|
|
darco |
b3016b |
void print() const
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("(x=%f,y=%f)\n",x,y);
|
|
dooglus |
cee594 |
}
|
|
darco |
b3016b |
};
|
|
darco |
b3016b |
|
|
darco |
b3016b |
struct stupidp
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
float z,w;
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
stupidp(float zin=0, float win=0) :z(zin),w(win) {}
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
void print() const
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf("(z=%f,w=%f)\n",z,w);
|
|
darco |
b3016b |
}
|
|
darco |
b3016b |
};
|
|
darco |
b3016b |
|
|
darco |
b3016b |
template <>
|
|
Carlos Lopez |
d466d3 |
class value_store_type<stupidp></stupidp>
|
|
darco |
b3016b |
{
|
|
Carlos Lopez |
d466d3 |
public:
|
|
dooglus |
cee594 |
typedef stupidv value_type;
|
|
darco |
b3016b |
};
|
|
darco |
b3016b |
|
|
darco |
b3016b |
int main()
|
|
dooglus |
cee594 |
{
|
|
darco |
b3016b |
try
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
value v(10.0); //construction
|
|
darco |
b3016b |
value v2; //default construct...
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//get type...
|
|
darco |
b3016b |
printf("type of 10.0: %s\n", v.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
v2 = 1; //assignment
|
|
darco |
b3016b |
printf("type of 1: %s\n", v2.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//extract int test
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
int *pi = value_cast<int>(&v2);</int>
|
|
darco |
b3016b |
printf("v2 is an int(%p)\n", pi);
|
|
darco |
b3016b |
printf(" %d\n", value_cast<int>(v2));</int>
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
printf(" const version: %d\n", value_cast<int>(value(5)));</int>
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
v = 'c'; //assignment again...
|
|
darco |
b3016b |
printf("type of c: %s\n", v.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
v2 = v; //value assignment
|
|
darco |
b3016b |
printf("type of v2 , v: %s , %s\n", v2.type().name(), v.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//random type test
|
|
darco |
b3016b |
v = stupidv(0,1);
|
|
darco |
b3016b |
printf("type of vec: %s\n", v.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
//type cast with binary change test
|
|
darco |
b3016b |
value_cast<stupidp>(&v)->print();</stupidp>
|
|
darco |
b3016b |
value_cast<stupidv>(stupidp(5,10)).print(); //copy test</stupidv>
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
printf("type of v: %s\n", v.type().name());
|
|
dooglus |
cee594 |
printf("type of v2: %s\n", v2.type().name());
|
|
darco |
b3016b |
v.swap(v2);
|
|
darco |
b3016b |
printf("type of v: %s\n", v.type().name());
|
|
darco |
b3016b |
printf("type of v2: %s\n", v2.type().name());
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
// test the exception throwing...
|
|
darco |
b3016b |
value_cast<int>(stupidp(6,66));</int>
|
|
dooglus |
cee594 |
|
|
dooglus |
cee594 |
}catch(const etl::bad_value_cast &e)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf(" Exploded: %s\n",e.what());
|
|
darco |
b3016b |
}catch(...)
|
|
darco |
b3016b |
{
|
|
darco |
b3016b |
printf(" Exploded\n");
|
|
darco |
b3016b |
}
|
|
dooglus |
cee594 |
|
|
darco |
b3016b |
return 0;
|
|
darco |
b3016b |
}
|