⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coordinatearraysequencetest.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
字号:
// $Id: CoordinateArraySequenceTest.cpp 1924 2006-12-04 09:57:51Z strk $// // Test Suite for geos::geom::CoordinateArraySequence class.// TUT#include <tut.h>// GEOS#include <geos/geom/Coordinate.h>#include <geos/geom/CoordinateArraySequence.h>#include <geos/geom/CoordinateArraySequenceFactory.h>// STL#include <string>#include <vector>namespace tut{    //    // Test Group    //    // Common data used by tests    struct test_coordinatearraysequence_data    {        test_coordinatearraysequence_data() {}    };    typedef test_group<test_coordinatearraysequence_data> group;    typedef group::object object;    group test_coordinatearraysequence_group("geos::geom::CoordinateArraySequence");    //    // Test Cases    //    // Test of default constructor    template<>    template<>    void object::test<1>()    {		const size_t size = 0;        geos::geom::CoordinateArraySequence sequence;            ensure( sequence.isEmpty() );        ensure_equals( sequence.getSize(), size );		ensure_equals( sequence.size(), size );		ensure_equals( sequence.toString(), std::string("()") );				const size_t dim = 3;		ensure_equals( sequence.getDimension() , dim);    }    // Test of overriden constructor    template<>    template<>    void object::test<2>()    {		const size_t size = 3;        geos::geom::CoordinateArraySequence sequence(size);            ensure( !sequence.isEmpty() );        ensure_equals( sequence.getSize(), size );		ensure_equals( sequence.size(), size );		ensure_not_equals( sequence.toString(), std::string("()") );		ensure("Every coodinate in the default sequence should be same.", sequence.hasRepeatedPoints() );		const size_t dim = 3;		ensure_equals( sequence.getDimension(), dim );    }    // Test of overriden constructor taking vector of coordiantes    template<>    template<>    void object::test<3>()    {		using geos::geom::Coordinate;				const size_t size = 3;		const double a = 0;		const double b = 5.0;		const double c = 10.0;		std::vector<Coordinate>* col = new std::vector<Coordinate>();		col->push_back(Coordinate(a, a, a));		col->push_back(Coordinate(b, b, b));		col->push_back(Coordinate(c, c, c));		// sequence takes ownership of the col		geos::geom::CoordinateArraySequence sequence(col);		ensure( !sequence.isEmpty() );        ensure_equals( sequence.getSize(), size );		ensure_equals( sequence.size(), size );		ensure_not_equals( sequence.toString(), std::string("()") );		ensure("Coordinate sequence should contain unique coordinates.", !sequence.hasRepeatedPoints() );	}    // Test of copy constructor    template<>    template<>    void object::test<4>()    {		using geos::geom::Coordinate;		// Create empty sequence		const size_t sizeEmpty = 0;        geos::geom::CoordinateArraySequence empty_original;      		ensure( empty_original.isEmpty() );		ensure_equals( empty_original.size(), sizeEmpty );		ensure_equals( empty_original.toString(), std::string("()") );		// Create copy of empty sequence		geos::geom::CoordinateArraySequence empty_copy(empty_original);		ensure( empty_copy.isEmpty() );		ensure_equals( empty_copy.size(), sizeEmpty );		ensure_equals( empty_copy.toString(), std::string("()") );		// Create non-empty sequence		const size_t sizeNonEmpty = 2;		std::vector<Coordinate>* col = new std::vector<Coordinate>();		col->push_back(Coordinate(1, 2, 3));		col->push_back(Coordinate(5, 10, 15));		geos::geom::CoordinateArraySequence non_empty_original(col);				ensure( !non_empty_original.isEmpty() );		ensure_equals( non_empty_original.size(), sizeNonEmpty );		// Create copy of non-empty sequence		geos::geom::CoordinateArraySequence non_empty_copy(non_empty_original);		ensure( !non_empty_copy.isEmpty() );		ensure_equals( non_empty_copy.size(), sizeNonEmpty );		// Compare non-empty original and copy using equality operators		ensure_equals( non_empty_original.getAt(0), non_empty_copy.getAt(0) );		ensure_equals( non_empty_original.getAt(1), non_empty_copy.getAt(1) );		ensure_not_equals( non_empty_original.getAt(0), non_empty_copy.getAt(1) );		}    // Test of getX() and getY()    template<>    template<>    void object::test<5>()    {		using geos::geom::Coordinate;		// Create non-empty sequence		std::vector<Coordinate>* col = new std::vector<Coordinate>();		col->push_back(Coordinate(1, 2));		col->push_back(Coordinate(5, 10));				const size_t size = 2;		geos::geom::CoordinateArraySequence sequence(col);				ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), size );		ensure_equals( sequence.getX(0), 1 );		ensure_equals( sequence.getY(0), 2 );		ensure_equals( sequence.getX(1), 5 );		ensure_equals( sequence.getY(1), 10 );	}    // Test of getAt()    template<>    template<>    void object::test<6>()    {		using geos::geom::Coordinate;		// Create non-empty sequence		std::vector<Coordinate>* col = new std::vector<Coordinate>();		col->push_back(Coordinate(1, 2, 3));		col->push_back(Coordinate(5, 10, 15));				const size_t size = 2;		geos::geom::CoordinateArraySequence sequence(col);				ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), size );		ensure_not_equals( sequence.getAt(0), sequence.getAt(1) );		// First version of getAt()		ensure_equals( sequence.getAt(0).x, 1 );		ensure_equals( sequence.getAt(0).y, 2 );		ensure_equals( sequence.getAt(0).z, 3 );		ensure_equals( sequence.getAt(1).x, 5 );		ensure_equals( sequence.getAt(1).y, 10 );		ensure_equals( sequence.getAt(1).z, 15 );		// Second version of getAt()		Coordinate buf;		sequence.getAt(0, buf);		ensure_equals( buf.x, 1 );		ensure_equals( buf.y, 2 );		ensure_equals( buf.z, 3 );				sequence.getAt(1, buf);		ensure_equals( buf.x, 5 );		ensure_equals( buf.y, 10 );		ensure_equals( buf.z, 15 );	}    // Test of add()    template<>    template<>    void object::test<7>()    {		using geos::geom::Coordinate;		// Create empty sequence to fill with coordinates		const size_t size = 0;		geos::geom::CoordinateArraySequence sequence;				ensure( sequence.isEmpty() );		ensure_equals( sequence.size(), size );		// Add coordinates		Coordinate tmp(1, 2, 3);				sequence.add(tmp); // insert copy of tmp		const size_t sizeOne = 1;		ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), sizeOne );		tmp.x = 5;		tmp.y = 10;		tmp.z = 15;		sequence.add(tmp); // insert copy of tmp		const size_t sizeTwo = 2;				ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), sizeTwo );		ensure( !sequence.hasRepeatedPoints() );		// Check elements of sequence		ensure_not_equals( sequence.getAt(0), sequence.getAt(1) );				ensure_equals( sequence.getAt(0).x, 1 );		ensure_equals( sequence.getAt(0).y, 2 );		ensure_equals( sequence.getAt(0).z, 3 );		ensure_equals( sequence.getAt(1).x, 5 );		ensure_equals( sequence.getAt(1).y, 10 );		ensure_equals( sequence.getAt(1).z, 15 );	}    // Test of setAt()    template<>    template<>    void object::test<8>()    {		using geos::geom::Coordinate;		// Create sequence with 2 default coordinates		const size_t size = 2;		geos::geom::CoordinateArraySequence sequence(size);				ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), size );		ensure( sequence.hasRepeatedPoints() );		// Set new values to first coordinate		Coordinate first(1, 2, 3);		sequence.setAt(first, 0);		ensure_equals( sequence.size(), size );		ensure_equals( sequence.getAt(0).x, 1 );		ensure_equals( sequence.getAt(0).y, 2 );		ensure_equals( sequence.getAt(0).z, 3 );		// Set new values to second coordinate 		Coordinate second(5, 10, 15);		sequence.setAt(second, 1);		ensure_equals( sequence.size(), size );		ensure_equals( sequence.getAt(1).x, 5 );		ensure_equals( sequence.getAt(1).y, 10 );		ensure_equals( sequence.getAt(1).z, 15 );		ensure( !sequence.hasRepeatedPoints() );	}    // Test of deleteAt()    template<>    template<>    void object::test<9>()    {		using geos::geom::Coordinate;		// Create sequence with only 1 default coordinate		const size_t sizeOne = 1;		geos::geom::CoordinateArraySequence sequence(1);				ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), sizeOne );		// Delete the only coordinate in the sequence		sequence.deleteAt(0);		const size_t sizeZero = 0;				ensure( sequence.isEmpty() );		ensure_equals( sequence.size(), sizeZero );		// Add new 3 coordinates		Coordinate first(1, 2, 3);		sequence.add(first);		Coordinate second(5, 10, 15);		sequence.add(second);		Coordinate third(9, 18, 27);		sequence.add(third);		const size_t sizeThree = 3;						ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), sizeThree );		// Delete coordinate in the middle of sequence - the second one.		sequence.deleteAt(1); // (5, 10, 15)		const size_t sizeTwo = 2;		ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), sizeTwo );				ensure_not_equals( sequence.getAt(0), sequence.getAt(1) );		ensure_equals( sequence.getAt(0), first );		ensure_not_equals( "deleteAt() did not remove coordinate.", sequence.getAt(1), second );		ensure_equals( sequence.getAt(1), third );	}	// Test of setPoints()    template<>    template<>    void object::test<10>()    {		using geos::geom::Coordinate;		// Create empty sequence		const size_t size = 0;		geos::geom::CoordinateArraySequence sequence;				ensure( sequence.isEmpty() );		ensure_equals( sequence.size(), size );		// Create collection of points		const std::vector<Coordinate>::size_type sizeCol = 3;		std::vector<Coordinate> col;		col.push_back(Coordinate(1, 2, 3));		col.push_back(Coordinate(5, 10, 15));		col.push_back(Coordinate(9, 18, 27));		ensure( "std::vector bug assumed!", !col.empty() );		ensure_equals( "std::vector bug assumed!", col.size(), sizeCol );		// Use setPoints()		sequence.setPoints(col);		ensure( !sequence.isEmpty() );		ensure_equals( sequence.size(), col.size() );		ensure( !sequence.hasRepeatedPoints() );		// Check inserted points		ensure_equals( sequence.getAt(0).x, 1 );		ensure_equals( sequence.getAt(0).y, 2 );		ensure_equals( sequence.getAt(0).z, 3 );		ensure_equals( sequence.getAt(1).x, 5 );		ensure_equals( sequence.getAt(1).y, 10 );		ensure_equals( sequence.getAt(1).z, 15 );		ensure_equals( sequence.getAt(2).x, 9 );		ensure_equals( sequence.getAt(2).y, 18 );		ensure_equals( sequence.getAt(2).z, 27 );	}	// Test of removeRepeatedPoints	template<>	template<>	void object::test<11>()	{		using geos::geom::Coordinate;		geos::geom::CoordinateArraySequence sequence;		// Add new 3 equal coordinates		Coordinate c(1, 2, 3);		sequence.add(c);		sequence.add(c);		sequence.add(c);		Coordinate c2(5, 10, 15);		sequence.add(c2);		sequence.add(c2);		sequence.add(c);		ensure_equals( sequence.size(), 6u );		sequence.removeRepeatedPoints();		ensure_equals( sequence.size(), 3u );	}	// Test of equality and inequality operators	template<>	template<>	void object::test<12>()	{		using geos::geom::Coordinate;		using geos::geom::CoordinateArraySequence;		using geos::geom::CoordinateSequence;		Coordinate c1(1, 2, 3);		Coordinate c2(5, 10, 15);		Coordinate c3(6, 9, 10);		CoordinateArraySequence sequence1;		CoordinateArraySequence sequence2;		sequence1.add(c1);		sequence1.add(c2);		sequence1.add(c3);		sequence2.add(c1);		sequence2.add(c2);		sequence2.add(c3);		ensure_equals( sequence1, sequence2 );		ensure_equals( sequence2, sequence1 );		// Add a new coordinate to sequence2		sequence2.add(c3);		ensure_not_equals( sequence1, sequence2 );		ensure_not_equals( sequence2, sequence1 );		// Add a new coordinate to sequence1		sequence1.add(c3);		ensure_equals( sequence1, sequence2 );		ensure_equals( sequence2, sequence1 );		// Add a new coordinate to sequence1		sequence1.add(c3);		sequence2.add(c2);		ensure_not_equals( sequence1, sequence2 );		ensure_not_equals( sequence2, sequence1 );	}	// Test setOrdinate	template<>	template<>	void object::test<13>()	{		using geos::geom::Coordinate;		using geos::geom::CoordinateArraySequence;		using geos::geom::CoordinateSequence;		Coordinate c1(1, 2, 3);		CoordinateArraySequence sequence1;		sequence1.add(c1);		ensure_equals( sequence1[0], c1 );		sequence1.setOrdinate(0, CoordinateSequence::X, 4);		ensure_equals( sequence1[0].x, 4 );		sequence1.setOrdinate(0, CoordinateSequence::Y, 5);		ensure_equals( sequence1[0].y, 5 );		sequence1.setOrdinate(0, CoordinateSequence::Z, 6);		ensure_equals( sequence1[0].z, 6 );	}	// Test setOrdinate setting ordinates in arbitrary order	template<>	template<>	void object::test<14>()	{		using geos::geom::Coordinate;		using geos::geom::CoordinateArraySequence;		using geos::geom::CoordinateSequence;		Coordinate c1(1, 2, 3);		CoordinateArraySequence sequence1;		sequence1.add(c1);		ensure_equals( sequence1[0], c1 );		// Order: Y, X, Z		sequence1.setOrdinate(0, CoordinateSequence::Y, 5);		ensure_equals( sequence1[0].y, 5 );		sequence1.setOrdinate(0, CoordinateSequence::X, 4);		ensure_equals( sequence1[0].x, 4 );		sequence1.setOrdinate(0, CoordinateSequence::Z, 6);		ensure_equals( sequence1[0].z, 6 );	}	// Test setOrdinate setting ordinates in arbitrary order	// against a non-initialized CoordinateSequence	template<>	template<>	void object::test<15>()	{		using geos::geom::Coordinate;		using geos::geom::CoordinateArraySequence;		using geos::geom::CoordinateSequence;		typedef geos::geom::CoordinateSequenceFactory const* CoordinateFactoryCPtr;		CoordinateFactoryCPtr factory = geos::geom::CoordinateArraySequenceFactory::instance();		std::auto_ptr<CoordinateSequence> sequence1ptr(factory->create(4, 2));		CoordinateSequence& seq = *sequence1ptr;		// Index: 0 - Order: Y, X, Z		seq.setOrdinate(0, CoordinateSequence::Y,  5); ensure_equals( seq[0].y, 5 );		seq.setOrdinate(0, CoordinateSequence::Z,  6); ensure_equals( seq[0].z, 6 );		seq.setOrdinate(0, CoordinateSequence::X,  4); ensure_equals( seq[0].x, 4 );		// Index: 1 - Order: Z, X, Y		seq.setOrdinate(1, CoordinateSequence::Z,  9); ensure_equals( seq[1].z, 9 );		seq.setOrdinate(1, CoordinateSequence::X,  8); ensure_equals( seq[1].x, 8 );		seq.setOrdinate(1, CoordinateSequence::Y,  7); ensure_equals( seq[1].y, 7 );		// Index: 2 - Order: X, Y, Z		seq.setOrdinate(2, CoordinateSequence::X,  34); ensure_equals( seq[2].x, 34 );		seq.setOrdinate(2, CoordinateSequence::Y,  -45); ensure_equals( seq[2].y, -45 );		seq.setOrdinate(2, CoordinateSequence::Z,  152); ensure_equals( seq[2].z, 152 );		// Index: 3 - Order: Y, Z, X		seq.setOrdinate(3, CoordinateSequence::Y,  63); ensure_equals( seq[3].y, 63 );		seq.setOrdinate(3, CoordinateSequence::Z,  13); ensure_equals( seq[3].z, 13 );		seq.setOrdinate(3, CoordinateSequence::X,  -65); ensure_equals( seq[3].x, -65 );	}} // namespace tut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -