Blame ETL/test/value.cpp

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
}