+++ /dev/null
-/*! ========================================================================
-** Extended Template and Library Test Suite
-** Generic Value Test
-** $Id$
-**
-** Copyright (c) 2002 Adrian Bentley
-**
-** This package is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License as
-** published by the Free Software Foundation; either version 2 of
-** the License, or (at your option) any later version.
-**
-** This package is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** General Public License for more details.
-**
-** === N O T E S ===========================================================
-**
-** ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#include <ETL/value>
-#include <stdio.h>
-
-/* === M A C R O S ========================================================= */
-
-using namespace etl;
-
-/* === C L A S S E S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === E N T R Y P O I N T ================================================= */
-
-struct stupidv
-{
- float x,y;
-
- stupidv(float xin=0, float yin=0) :x(xin),y(yin) {}
- void print() const
- {
- printf("(x=%f,y=%f)\n",x,y);
- }
-};
-
-struct stupidp
-{
- float z,w;
-
- stupidp(float zin=0, float win=0) :z(zin),w(win) {}
-
- void print() const
- {
- printf("(z=%f,w=%f)\n",z,w);
- }
-};
-
-template <>
-class etl::value_store_type<stupidp>
-{
- typedef stupidv value_type;
-};
-
-int main()
-{
- try
- {
- value v(10.0); //construction
- value v2; //default construct...
-
- //get type...
- printf("type of 10.0: %s\n", v.type().name());
-
- v2 = 1; //assignment
- printf("type of 1: %s\n", v2.type().name());
-
- //extract int test
-
- int *pi = value_cast<int>(&v2);
- printf("v2 is an int(%p)\n", pi);
- printf(" %d\n", value_cast<int>(v2));
-
- printf(" const version: %d\n", value_cast<int>(value(5)));
-
- v = 'c'; //assignment again...
- printf("type of c: %s\n", v.type().name());
-
- v2 = v; //value assignment
- printf("type of v2 , v: %s , %s\n", v2.type().name(), v.type().name());
-
- //random type test
- v = stupidv(0,1);
- printf("type of vec: %s\n", v.type().name());
-
- //type cast with binary change test
- value_cast<stupidp>(&v)->print();
- value_cast<stupidv>(stupidp(5,10)).print(); //copy test
-
- printf("type of v: %s\n", v.type().name());
- printf("type of v2: %s\n", v2.type().name());
- v.swap(v2);
- printf("type of v: %s\n", v.type().name());
- printf("type of v2: %s\n", v2.type().name());
-
- // test the exception throwing...
- value_cast<int>(stupidp(6,66));
-
- }catch(const etl::bad_value_cast &e)
- {
- printf(" Exploded: %s\n",e.what());
- }catch(...)
- {
- printf(" Exploded\n");
- }
-
- return 0;
-}