Standardize line endings in repo (#30112)
	
		
	
				
					
				
			use lf by default
old-commit-hash: 205cf12258
			
			
				testing-closet
			
			
		
							parent
							
								
									657d11b4a2
								
							
						
					
					
						commit
						a0d7f9b2b1
					
				
				 14 changed files with 4459 additions and 4457 deletions
			
			
		| @ -1,134 +1,134 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/Constants.h |  *	\file include/qpOASES_e/Constants.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  * |  * | ||||||
|  *	Definition of all global constants. |  *	Definition of all global constants. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_CONSTANTS_H | #ifndef QPOASES_CONSTANTS_H | ||||||
| #define QPOASES_CONSTANTS_H | #define QPOASES_CONSTANTS_H | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include <qpOASES_e/Types.h> | #include <qpOASES_e/Types.h> | ||||||
| 
 | 
 | ||||||
| #ifdef __CODE_GENERATION__ | #ifdef __CODE_GENERATION__ | ||||||
| 
 | 
 | ||||||
|   #define CONVERTTOSTRINGAUX(x) #x |   #define CONVERTTOSTRINGAUX(x) #x | ||||||
|   #define CONVERTTOSTRING(x) CONVERTTOSTRINGAUX(x) |   #define CONVERTTOSTRING(x) CONVERTTOSTRINGAUX(x) | ||||||
| 
 | 
 | ||||||
|   #ifndef QPOASES_CUSTOM_INTERFACE |   #ifndef QPOASES_CUSTOM_INTERFACE | ||||||
|   #include "acado_qpoases3_interface.h" |   #include "acado_qpoases3_interface.h" | ||||||
|   #else |   #else | ||||||
|   #include CONVERTTOSTRING(QPOASES_CUSTOM_INTERFACE) |   #include CONVERTTOSTRING(QPOASES_CUSTOM_INTERFACE) | ||||||
|   #endif |   #endif | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef __EXTERNAL_DIMENSIONS__ | #ifndef __EXTERNAL_DIMENSIONS__ | ||||||
| 
 | 
 | ||||||
|   /*#define QPOASES_NVMAX  50
 |   /*#define QPOASES_NVMAX  50
 | ||||||
|   #define QPOASES_NCMAX  100*/ |   #define QPOASES_NCMAX  100*/ | ||||||
|   #define QPOASES_NVMAX  287 |   #define QPOASES_NVMAX  287 | ||||||
|   #define QPOASES_NCMAX  709 |   #define QPOASES_NCMAX  709 | ||||||
| 
 | 
 | ||||||
| #endif /* __EXTERNAL_DIMENSIONS__ */ | #endif /* __EXTERNAL_DIMENSIONS__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Maximum number of variables within a QP formulation.
 | /** Maximum number of variables within a QP formulation.
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| #define NVMAX  QPOASES_NVMAX | #define NVMAX  QPOASES_NVMAX | ||||||
| 
 | 
 | ||||||
| /** Maximum number of constraints within a QP formulation.
 | /** Maximum number of constraints within a QP formulation.
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| #define NCMAX  QPOASES_NCMAX | #define NCMAX  QPOASES_NCMAX | ||||||
| 
 | 
 | ||||||
| #if ( QPOASES_NVMAX > QPOASES_NCMAX ) | #if ( QPOASES_NVMAX > QPOASES_NCMAX ) | ||||||
| #define NVCMAX QPOASES_NVMAX | #define NVCMAX QPOASES_NVMAX | ||||||
| #else | #else | ||||||
| #define NVCMAX QPOASES_NCMAX | #define NVCMAX QPOASES_NCMAX | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if ( QPOASES_NVMAX > QPOASES_NCMAX ) | #if ( QPOASES_NVMAX > QPOASES_NCMAX ) | ||||||
| #define NVCMIN QPOASES_NCMAX | #define NVCMIN QPOASES_NCMAX | ||||||
| #else | #else | ||||||
| #define NVCMIN QPOASES_NVMAX | #define NVCMIN QPOASES_NVMAX | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Maximum number of QPs in a sequence solved by means of the OQP interface.
 | /** Maximum number of QPs in a sequence solved by means of the OQP interface.
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| #define NQPMAX 1000 | #define NQPMAX 1000 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Numerical value of machine precision (min eps, s.t. 1+eps > 1).
 | /** Numerical value of machine precision (min eps, s.t. 1+eps > 1).
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| #ifndef __CODE_GENERATION__ | #ifndef __CODE_GENERATION__ | ||||||
| 
 | 
 | ||||||
|   #ifdef __USE_SINGLE_PRECISION__ |   #ifdef __USE_SINGLE_PRECISION__ | ||||||
|   static const real_t QPOASES_EPS = 1.193e-07; |   static const real_t QPOASES_EPS = 1.193e-07; | ||||||
|   #else |   #else | ||||||
|   static const real_t QPOASES_EPS = 2.221e-16; |   static const real_t QPOASES_EPS = 2.221e-16; | ||||||
|   #endif /* __USE_SINGLE_PRECISION__ */ |   #endif /* __USE_SINGLE_PRECISION__ */ | ||||||
| 
 | 
 | ||||||
| #endif /* __CODE_GENERATION__ */ | #endif /* __CODE_GENERATION__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Numerical value of zero (for situations in which it would be
 | /** Numerical value of zero (for situations in which it would be
 | ||||||
|  *	unreasonable to compare with 0.0). |  *	unreasonable to compare with 0.0). | ||||||
|  *  Note: this value has to be positive! */ |  *  Note: this value has to be positive! */ | ||||||
| static const real_t QPOASES_ZERO = 1.0e-25; | static const real_t QPOASES_ZERO = 1.0e-25; | ||||||
| 
 | 
 | ||||||
| /** Numerical value of infinity (e.g. for non-existing bounds).
 | /** Numerical value of infinity (e.g. for non-existing bounds).
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| static const real_t QPOASES_INFTY = 1.0e20; | static const real_t QPOASES_INFTY = 1.0e20; | ||||||
| 
 | 
 | ||||||
| /** Tolerance to used for isEqual, isZero etc.
 | /** Tolerance to used for isEqual, isZero etc.
 | ||||||
|  *	Note: this value has to be positive! */ |  *	Note: this value has to be positive! */ | ||||||
| static const real_t QPOASES_TOL = 1.0e-25; | static const real_t QPOASES_TOL = 1.0e-25; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Maximum number of characters within a string.
 | /** Maximum number of characters within a string.
 | ||||||
|  *	Note: this value should be at least 41! */ |  *	Note: this value should be at least 41! */ | ||||||
| #define QPOASES_MAX_STRING_LENGTH 160 | #define QPOASES_MAX_STRING_LENGTH 160 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_CONSTANTS_H */ | #endif	/* QPOASES_CONSTANTS_H */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	end of file |  *	end of file | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -1,62 +1,62 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/ConstraintProduct.h |  *	\file include/qpOASES_e/ConstraintProduct.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches (thanks to D. Kwame Minde Kufoalor) |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches (thanks to D. Kwame Minde Kufoalor) | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2009-2015 |  *	\date 2009-2015 | ||||||
|  * |  * | ||||||
|  *	Declaration of the ConstraintProduct interface which allows to specify a |  *	Declaration of the ConstraintProduct interface which allows to specify a | ||||||
|  *	user-defined function for evaluating the constraint product at the 
 |  *	user-defined function for evaluating the constraint product at the 
 | ||||||
|  *	current iterate to speed-up QP solution in case of a specially structured |  *	current iterate to speed-up QP solution in case of a specially structured | ||||||
|  *	constraint matrix. |  *	constraint matrix. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_CONSTRAINT_PRODUCT_H | #ifndef QPOASES_CONSTRAINT_PRODUCT_H | ||||||
| #define QPOASES_CONSTRAINT_PRODUCT_H | #define QPOASES_CONSTRAINT_PRODUCT_H | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** 
 | /** 
 | ||||||
|  *	\brief Interface for specifying user-defined evaluations of constraint products. |  *	\brief Interface for specifying user-defined evaluations of constraint products. | ||||||
|  * |  * | ||||||
|  *	An interface which allows to specify a user-defined function for evaluating the 
 |  *	An interface which allows to specify a user-defined function for evaluating the 
 | ||||||
|  *	constraint product at the current iterate to speed-up QP solution in case 
 |  *	constraint product at the current iterate to speed-up QP solution in case 
 | ||||||
|  *	of a specially structured constraint matrix. |  *	of a specially structured constraint matrix. | ||||||
|  * |  * | ||||||
|  *	\author Hans Joachim Ferreau (thanks to Kwame Minde Kufoalor) |  *	\author Hans Joachim Ferreau (thanks to Kwame Minde Kufoalor) | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2009-2015 |  *	\date 2009-2015 | ||||||
|  */ |  */ | ||||||
| typedef int(*ConstraintProduct)( int, const real_t* const, real_t* const ); | typedef int(*ConstraintProduct)( int, const real_t* const, real_t* const ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_CONSTRAINT_PRODUCT_H */ | #endif	/* QPOASES_CONSTRAINT_PRODUCT_H */ | ||||||
|  | |||||||
| @ -1,221 +1,221 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/Indexlist.h |  *	\file include/qpOASES_e/Indexlist.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  * |  * | ||||||
|  *	Declaration of the Indexlist class designed to manage index lists of |  *	Declaration of the Indexlist class designed to manage index lists of | ||||||
|  *	constraints and bounds within a SubjectTo object. |  *	constraints and bounds within a SubjectTo object. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_INDEXLIST_H | #ifndef QPOASES_INDEXLIST_H | ||||||
| #define QPOASES_INDEXLIST_H | #define QPOASES_INDEXLIST_H | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include <qpOASES_e/Utils.h> | #include <qpOASES_e/Utils.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\brief Stores and manages index lists. |  *	\brief Stores and manages index lists. | ||||||
|  * |  * | ||||||
|  *	This class manages index lists of active/inactive bounds/constraints. |  *	This class manages index lists of active/inactive bounds/constraints. | ||||||
|  * |  * | ||||||
|  *	\author Hans Joachim Ferreau |  *	\author Hans Joachim Ferreau | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	int *number;		/**< Array to store numbers of constraints or bounds. */ | 	int *number;		/**< Array to store numbers of constraints or bounds. */ | ||||||
| 	int *iSort;			/**< Index list to sort vector \a number */ | 	int *iSort;			/**< Index list to sort vector \a number */ | ||||||
| 
 | 
 | ||||||
| 	int	length;			/**< Length of index list. */ | 	int	length;			/**< Length of index list. */ | ||||||
| 	int	first;			/**< Physical index of first element. */ | 	int	first;			/**< Physical index of first element. */ | ||||||
| 	int	last;			/**< Physical index of last element. */ | 	int	last;			/**< Physical index of last element. */ | ||||||
| 	int	lastusedindex;	/**< Physical index of last entry in index list. */ | 	int	lastusedindex;	/**< Physical index of last entry in index list. */ | ||||||
| 	int	physicallength;	/**< Physical length of index list. */ | 	int	physicallength;	/**< Physical length of index list. */ | ||||||
| } Indexlist; | } Indexlist; | ||||||
| 
 | 
 | ||||||
| int Indexlist_calculateMemorySize( int n); | int Indexlist_calculateMemorySize( int n); | ||||||
| 
 | 
 | ||||||
| char *Indexlist_assignMemory(int n, Indexlist **mem, void *raw_memory); | char *Indexlist_assignMemory(int n, Indexlist **mem, void *raw_memory); | ||||||
| 
 | 
 | ||||||
| Indexlist *Indexlist_createMemory( int n ); | Indexlist *Indexlist_createMemory( int n ); | ||||||
| 
 | 
 | ||||||
| /** Constructor which takes the desired physical length of the index list. */ | /** Constructor which takes the desired physical length of the index list. */ | ||||||
| void IndexlistCON(	Indexlist* _THIS, | void IndexlistCON(	Indexlist* _THIS, | ||||||
| 					int n	/**< Physical length of index list. */ | 					int n	/**< Physical length of index list. */ | ||||||
| 					); | 					); | ||||||
| 
 | 
 | ||||||
| /** Copies all members from given rhs object.
 | /** Copies all members from given rhs object.
 | ||||||
|  *  \return SUCCESSFUL_RETURN */ |  *  \return SUCCESSFUL_RETURN */ | ||||||
| void IndexlistCPY(	Indexlist* FROM, | void IndexlistCPY(	Indexlist* FROM, | ||||||
| 					Indexlist* TO | 					Indexlist* TO | ||||||
| 					); | 					); | ||||||
| 
 | 
 | ||||||
| /** Initialises index list of desired physical length.
 | /** Initialises index list of desired physical length.
 | ||||||
|  *	\return SUCCESSFUL_RETURN \n |  *	\return SUCCESSFUL_RETURN \n | ||||||
|  			RET_INVALID_ARGUMENTS */ |  			RET_INVALID_ARGUMENTS */ | ||||||
| returnValue Indexlist_init(	Indexlist* _THIS, | returnValue Indexlist_init(	Indexlist* _THIS, | ||||||
| 							int n		/**< Physical length of index list. */ | 							int n		/**< Physical length of index list. */ | ||||||
| 							); | 							); | ||||||
| 
 | 
 | ||||||
| /** Creates an array of all numbers within the index set in correct order.
 | /** Creates an array of all numbers within the index set in correct order.
 | ||||||
|  *	\return SUCCESSFUL_RETURN \n |  *	\return SUCCESSFUL_RETURN \n | ||||||
|  			RET_INDEXLIST_CORRUPTED */ |  			RET_INDEXLIST_CORRUPTED */ | ||||||
| returnValue Indexlist_getNumberArray(	Indexlist* _THIS, | returnValue Indexlist_getNumberArray(	Indexlist* _THIS, | ||||||
| 										int** const numberarray	/**< Output: Array of numbers (NULL on error). */ | 										int** const numberarray	/**< Output: Array of numbers (NULL on error). */ | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| /** Creates an array of all numbers within the index set in correct order.
 | /** Creates an array of all numbers within the index set in correct order.
 | ||||||
|  *	\return SUCCESSFUL_RETURN \n |  *	\return SUCCESSFUL_RETURN \n | ||||||
| 			RET_INDEXLIST_CORRUPTED */ | 			RET_INDEXLIST_CORRUPTED */ | ||||||
| returnValue	Indexlist_getISortArray(	Indexlist* _THIS, | returnValue	Indexlist_getISortArray(	Indexlist* _THIS, | ||||||
| 										int** const iSortArray	/**< Output: iSort Array. */ | 										int** const iSortArray	/**< Output: iSort Array. */ | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Determines the index within the index list at which a given number is stored.
 | /** Determines the index within the index list at which a given number is stored.
 | ||||||
|  *	\return >= 0: Index of given number. \n |  *	\return >= 0: Index of given number. \n | ||||||
|  			-1: Number not found. */ |  			-1: Number not found. */ | ||||||
| int Indexlist_getIndex(	Indexlist* _THIS, | int Indexlist_getIndex(	Indexlist* _THIS, | ||||||
| 						int givennumber	/**< Number whose index shall be determined. */ | 						int givennumber	/**< Number whose index shall be determined. */ | ||||||
| 						); | 						); | ||||||
| 
 | 
 | ||||||
| /** Returns the number stored at a given physical index.
 | /** Returns the number stored at a given physical index.
 | ||||||
|  *	\return >= 0: Number stored at given physical index. \n |  *	\return >= 0: Number stored at given physical index. \n | ||||||
|  			-RET_INDEXLIST_OUTOFBOUNDS */ |  			-RET_INDEXLIST_OUTOFBOUNDS */ | ||||||
| static inline int Indexlist_getNumber(	Indexlist* _THIS, | static inline int Indexlist_getNumber(	Indexlist* _THIS, | ||||||
| 										int physicalindex	/**< Physical index of the number to be returned. */ | 										int physicalindex	/**< Physical index of the number to be returned. */ | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Returns the current length of the index list.
 | /** Returns the current length of the index list.
 | ||||||
|  *	\return Current length of the index list. */ |  *	\return Current length of the index list. */ | ||||||
| static inline int Indexlist_getLength(	Indexlist* _THIS | static inline int Indexlist_getLength(	Indexlist* _THIS | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| /** Returns last number within the index list.
 | /** Returns last number within the index list.
 | ||||||
|  *	\return Last number within the index list. */ |  *	\return Last number within the index list. */ | ||||||
| static inline int Indexlist_getLastNumber(	Indexlist* _THIS | static inline int Indexlist_getLastNumber(	Indexlist* _THIS | ||||||
| 											); | 											); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Adds number to index list.
 | /** Adds number to index list.
 | ||||||
|  *	\return SUCCESSFUL_RETURN \n |  *	\return SUCCESSFUL_RETURN \n | ||||||
|  			RET_INDEXLIST_MUST_BE_REORDERD \n |  			RET_INDEXLIST_MUST_BE_REORDERD \n | ||||||
|  			RET_INDEXLIST_EXCEEDS_MAX_LENGTH */ |  			RET_INDEXLIST_EXCEEDS_MAX_LENGTH */ | ||||||
| returnValue Indexlist_addNumber(	Indexlist* _THIS, | returnValue Indexlist_addNumber(	Indexlist* _THIS, | ||||||
| 									int addnumber			/**< Number to be added. */ | 									int addnumber			/**< Number to be added. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Removes number from index list.
 | /** Removes number from index list.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Indexlist_removeNumber(	Indexlist* _THIS, | returnValue Indexlist_removeNumber(	Indexlist* _THIS, | ||||||
| 									int removenumber	/**< Number to be removed. */ | 									int removenumber	/**< Number to be removed. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Swaps two numbers within index list.
 | /** Swaps two numbers within index list.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Indexlist_swapNumbers(	Indexlist* _THIS, | returnValue Indexlist_swapNumbers(	Indexlist* _THIS, | ||||||
| 									int number1,		/**< First number for swapping. */ | 									int number1,		/**< First number for swapping. */ | ||||||
| 									int number2			/**< Second number for swapping. */ | 									int number2			/**< Second number for swapping. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Determines if a given number is contained in the index set.
 | /** Determines if a given number is contained in the index set.
 | ||||||
|  *	\return BT_TRUE iff number is contain in the index set */ |  *	\return BT_TRUE iff number is contain in the index set */ | ||||||
| static inline BooleanType Indexlist_isMember(	Indexlist* _THIS, | static inline BooleanType Indexlist_isMember(	Indexlist* _THIS, | ||||||
| 												int _number		/**< Number to be tested for membership. */ | 												int _number		/**< Number to be tested for membership. */ | ||||||
| 												); | 												); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Find first index j between -1 and length in sorted list of indices
 | /** Find first index j between -1 and length in sorted list of indices
 | ||||||
|  *  iSort such that numbers[iSort[j]] <= i < numbers[iSort[j+1]]. Uses |  *  iSort such that numbers[iSort[j]] <= i < numbers[iSort[j+1]]. Uses | ||||||
|  *  bisection. |  *  bisection. | ||||||
|  *  \return j. */ |  *  \return j. */ | ||||||
| int Indexlist_findInsert(	Indexlist* _THIS, | int Indexlist_findInsert(	Indexlist* _THIS, | ||||||
| 							int i | 							int i | ||||||
| 							); | 							); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	g e t N u m b e r |  *	g e t N u m b e r | ||||||
|  */ |  */ | ||||||
| static inline int Indexlist_getNumber( Indexlist* _THIS, int physicalindex ) | static inline int Indexlist_getNumber( Indexlist* _THIS, int physicalindex ) | ||||||
| { | { | ||||||
| 	/* consistency check */ | 	/* consistency check */ | ||||||
| 	if ( ( physicalindex < 0 ) || ( physicalindex > _THIS->length ) ) | 	if ( ( physicalindex < 0 ) || ( physicalindex > _THIS->length ) ) | ||||||
| 		return -RET_INDEXLIST_OUTOFBOUNDS; | 		return -RET_INDEXLIST_OUTOFBOUNDS; | ||||||
| 
 | 
 | ||||||
| 	return _THIS->number[physicalindex]; | 	return _THIS->number[physicalindex]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	g e t L e n g t h |  *	g e t L e n g t h | ||||||
|  */ |  */ | ||||||
| static inline int Indexlist_getLength( Indexlist* _THIS ) | static inline int Indexlist_getLength( Indexlist* _THIS ) | ||||||
| { | { | ||||||
| 	return _THIS->length; | 	return _THIS->length; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	g e t L a s t N u m b e r |  *	g e t L a s t N u m b e r | ||||||
|  */ |  */ | ||||||
| static inline int Indexlist_getLastNumber( Indexlist* _THIS ) | static inline int Indexlist_getLastNumber( Indexlist* _THIS ) | ||||||
| { | { | ||||||
| 	return _THIS->number[_THIS->length-1]; | 	return _THIS->number[_THIS->length-1]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	g e t L a s t N u m b e r |  *	g e t L a s t N u m b e r | ||||||
|  */ |  */ | ||||||
| static inline BooleanType Indexlist_isMember( Indexlist* _THIS, int _number ) | static inline BooleanType Indexlist_isMember( Indexlist* _THIS, int _number ) | ||||||
| { | { | ||||||
| 	if ( Indexlist_getIndex( _THIS,_number ) >= 0 ) | 	if ( Indexlist_getIndex( _THIS,_number ) >= 0 ) | ||||||
| 		return BT_TRUE; | 		return BT_TRUE; | ||||||
| 	else | 	else | ||||||
| 		return BT_FALSE; | 		return BT_FALSE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_INDEXLIST_H */ | #endif	/* QPOASES_INDEXLIST_H */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	end of file |  *	end of file | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -1,287 +1,287 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/Matrices.h |  *	\file include/qpOASES_e/Matrices.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2009-2015 |  *	\date 2009-2015 | ||||||
|  * |  * | ||||||
|  *  Various matrix classes: Abstract base matrix class, dense and sparse matrices, |  *  Various matrix classes: Abstract base matrix class, dense and sparse matrices, | ||||||
|  *  including symmetry exploiting specializations. |  *  including symmetry exploiting specializations. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_MATRICES_H | #ifndef QPOASES_MATRICES_H | ||||||
| #define QPOASES_MATRICES_H | #define QPOASES_MATRICES_H | ||||||
| 
 | 
 | ||||||
| #ifdef __USE_SINGLE_PRECISION__ | #ifdef __USE_SINGLE_PRECISION__ | ||||||
| 
 | 
 | ||||||
| 	// single precision
 | 	// single precision
 | ||||||
| 	#define GEMM sgemm_ | 	#define GEMM sgemm_ | ||||||
| 	#define GEMV sgemv_ | 	#define GEMV sgemv_ | ||||||
| //	#define SYR ssyr_
 | //	#define SYR ssyr_
 | ||||||
| //	#define SYR2 ssyr2_
 | //	#define SYR2 ssyr2_
 | ||||||
| 	#define POTRF spotrf_ | 	#define POTRF spotrf_ | ||||||
| 
 | 
 | ||||||
| #else | #else | ||||||
| 
 | 
 | ||||||
| 	// double precision
 | 	// double precision
 | ||||||
| 	#define GEMM dgemm_ | 	#define GEMM dgemm_ | ||||||
| 	#define GEMV dgemv_ | 	#define GEMV dgemv_ | ||||||
| //	#define SYR  dsyr_
 | //	#define SYR  dsyr_
 | ||||||
| //	#define SYR2 dsyr2_
 | //	#define SYR2 dsyr2_
 | ||||||
| 	#define POTRF dpotrf_ | 	#define POTRF dpotrf_ | ||||||
| 
 | 
 | ||||||
| #endif /* __USE_SINGLE_PRECISION__ */ | #endif /* __USE_SINGLE_PRECISION__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifdef EXTERNAL_BLAS | #ifdef EXTERNAL_BLAS | ||||||
| 	// double precision
 | 	// double precision
 | ||||||
| 	void dgemm_(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int ldb, double *beta, double *C, int *ldc); | 	void dgemm_(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int ldb, double *beta, double *C, int *ldc); | ||||||
| 	void dgemv_(char *ta, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy); | 	void dgemv_(char *ta, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy); | ||||||
| 	void dpotrf_(char *uplo, int *m, double *A, int *lda, int *info); | 	void dpotrf_(char *uplo, int *m, double *A, int *lda, int *info); | ||||||
| 	// single precision
 | 	// single precision
 | ||||||
| 	void sgemm_(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int ldb, float *beta, float *C, int *ldc); | 	void sgemm_(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int ldb, float *beta, float *C, int *ldc); | ||||||
| 	void sgemv_(char *ta, int *m, int *n, float *alpha, float *A, int *lda, float *x, int *incx, float *beta, float *y, int *incy); | 	void sgemv_(char *ta, int *m, int *n, float *alpha, float *A, int *lda, float *x, int *incx, float *beta, float *y, int *incy); | ||||||
| 	void spotrf_(char *uplo, int *m, float *A, int *lda, int *info); | 	void spotrf_(char *uplo, int *m, float *A, int *lda, int *info); | ||||||
| #else | #else | ||||||
| 	/** Performs one of the matrix-matrix operation in double precision. */ | 	/** Performs one of the matrix-matrix operation in double precision. */ | ||||||
| 	void dgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, | 	void dgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, | ||||||
| 			const double*, const double*, const unsigned long*, const double*, const unsigned long*, | 			const double*, const double*, const unsigned long*, const double*, const unsigned long*, | ||||||
| 			const double*, double*, const unsigned long* ); | 			const double*, double*, const unsigned long* ); | ||||||
| 	/** Performs one of the matrix-matrix operation in single precision. */ | 	/** Performs one of the matrix-matrix operation in single precision. */ | ||||||
| 	void sgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, | 	void sgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, | ||||||
| 			const float*, const float*, const unsigned long*, const float*, const unsigned long*, | 			const float*, const float*, const unsigned long*, const float*, const unsigned long*, | ||||||
| 			const float*, float*, const unsigned long* ); | 			const float*, float*, const unsigned long* ); | ||||||
| 
 | 
 | ||||||
| 	/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in double precision. */ | 	/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in double precision. */ | ||||||
| 	void dpotrf_ ( const char *, const unsigned long *, double *, const unsigned long *, long * ); | 	void dpotrf_ ( const char *, const unsigned long *, double *, const unsigned long *, long * ); | ||||||
| 	/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in single precision. */ | 	/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in single precision. */ | ||||||
| 	void spotrf_ ( const char *, const unsigned long *, float *, const unsigned long *, long * ); | 	void spotrf_ ( const char *, const unsigned long *, float *, const unsigned long *, long * ); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	/** Performs a symmetric rank 1 operation in double precision. */ | 	/** Performs a symmetric rank 1 operation in double precision. */ | ||||||
| //	void dsyr_ ( const char *, const unsigned long *, const double *, const double *,
 | //	void dsyr_ ( const char *, const unsigned long *, const double *, const double *,
 | ||||||
| //				 const unsigned long *, double *, const unsigned long *);
 | //				 const unsigned long *, double *, const unsigned long *);
 | ||||||
| 	/** Performs a symmetric rank 1 operation in single precision. */ | 	/** Performs a symmetric rank 1 operation in single precision. */ | ||||||
| //	void ssyr_ ( const char *, const unsigned long *, const float *, const float *,
 | //	void ssyr_ ( const char *, const unsigned long *, const float *, const float *,
 | ||||||
| //				 const unsigned long *, float *, const unsigned long *);
 | //				 const unsigned long *, float *, const unsigned long *);
 | ||||||
| 
 | 
 | ||||||
| 	/** Performs a symmetric rank 2 operation in double precision. */ | 	/** Performs a symmetric rank 2 operation in double precision. */ | ||||||
| //	void dsyr2_ ( const char *, const unsigned long *, const double *, const double *,
 | //	void dsyr2_ ( const char *, const unsigned long *, const double *, const double *,
 | ||||||
| //				  const unsigned long *, const double *, const unsigned long *, double *, const unsigned long *);
 | //				  const unsigned long *, const double *, const unsigned long *, double *, const unsigned long *);
 | ||||||
| 	/** Performs a symmetric rank 2 operation in single precision. */ | 	/** Performs a symmetric rank 2 operation in single precision. */ | ||||||
| //	void ssyr2_ ( const char *, const unsigned long *, const float *, const float *,
 | //	void ssyr2_ ( const char *, const unsigned long *, const float *, const float *,
 | ||||||
| //				  const unsigned long *, const float *, const unsigned long *, float *, const unsigned long *);
 | //				  const unsigned long *, const float *, const unsigned long *, float *, const unsigned long *);
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include <qpOASES_e/Indexlist.h> | #include <qpOASES_e/Indexlist.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\brief Interfaces matrix-vector operations tailored to general dense matrices. |  *	\brief Interfaces matrix-vector operations tailored to general dense matrices. | ||||||
|  * |  * | ||||||
|  *	Dense matrix class (row major format). |  *	Dense matrix class (row major format). | ||||||
|  * |  * | ||||||
|  *	\author Andreas Potschka, Christian Kirches, Hans Joachim Ferreau |  *	\author Andreas Potschka, Christian Kirches, Hans Joachim Ferreau | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2011-2015 |  *	\date 2011-2015 | ||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	real_t *val;				/**< Vector of entries. */ | 	real_t *val;				/**< Vector of entries. */ | ||||||
| 	int nRows;					/**< Number of rows. */ | 	int nRows;					/**< Number of rows. */ | ||||||
| 	int nCols;					/**< Number of columns. */ | 	int nCols;					/**< Number of columns. */ | ||||||
| 	int leaDim;					/**< Leading dimension. */ | 	int leaDim;					/**< Leading dimension. */ | ||||||
| } DenseMatrix; | } DenseMatrix; | ||||||
| 
 | 
 | ||||||
| int DenseMatrix_calculateMemorySize( int m, int n ); | int DenseMatrix_calculateMemorySize( int m, int n ); | ||||||
| 
 | 
 | ||||||
| char *DenseMatrix_assignMemory( int m, int n, DenseMatrix **mem, void *raw_memory ); | char *DenseMatrix_assignMemory( int m, int n, DenseMatrix **mem, void *raw_memory ); | ||||||
| 
 | 
 | ||||||
| DenseMatrix *DenseMatrix_createMemory( int m, int n ); | DenseMatrix *DenseMatrix_createMemory( int m, int n ); | ||||||
| 
 | 
 | ||||||
| /** Constructor from vector of values.
 | /** Constructor from vector of values.
 | ||||||
|  *  Caution: Data pointer must be valid throughout lifetime |  *  Caution: Data pointer must be valid throughout lifetime | ||||||
|  */ |  */ | ||||||
| void DenseMatrixCON(	DenseMatrix* _THIS, | void DenseMatrixCON(	DenseMatrix* _THIS, | ||||||
| 						int m,			/**< Number of rows. */ | 						int m,			/**< Number of rows. */ | ||||||
| 						int n,			/**< Number of columns. */ | 						int n,			/**< Number of columns. */ | ||||||
| 						int lD,			/**< Leading dimension. */ | 						int lD,			/**< Leading dimension. */ | ||||||
| 						real_t *v		/**< Values. */ | 						real_t *v		/**< Values. */ | ||||||
| 						); | 						); | ||||||
| 
 | 
 | ||||||
| void DenseMatrixCPY(	DenseMatrix* FROM, | void DenseMatrixCPY(	DenseMatrix* FROM, | ||||||
| 						DenseMatrix* TO | 						DenseMatrix* TO | ||||||
| 						); | 						); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Frees all internal memory. */ | /** Frees all internal memory. */ | ||||||
| void DenseMatrix_free( DenseMatrix* _THIS ); | void DenseMatrix_free( DenseMatrix* _THIS ); | ||||||
| 
 | 
 | ||||||
| /** Constructor from vector of values.
 | /** Constructor from vector of values.
 | ||||||
|  *  Caution: Data pointer must be valid throughout lifetime |  *  Caution: Data pointer must be valid throughout lifetime | ||||||
|  */ |  */ | ||||||
| returnValue DenseMatrix_init(	DenseMatrix* _THIS, | returnValue DenseMatrix_init(	DenseMatrix* _THIS, | ||||||
| 								int m,			/**< Number of rows. */ | 								int m,			/**< Number of rows. */ | ||||||
| 								int n,			/**< Number of columns. */ | 								int n,			/**< Number of columns. */ | ||||||
| 								int lD,			/**< Leading dimension. */ | 								int lD,			/**< Leading dimension. */ | ||||||
| 								real_t *v		/**< Values. */ | 								real_t *v		/**< Values. */ | ||||||
| 								); | 								); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Returns i-th diagonal entry.
 | /** Returns i-th diagonal entry.
 | ||||||
|  *	\return i-th diagonal entry */ |  *	\return i-th diagonal entry */ | ||||||
| real_t DenseMatrix_diag(	DenseMatrix* _THIS, | real_t DenseMatrix_diag(	DenseMatrix* _THIS, | ||||||
| 							int i			/**< Index. */ | 							int i			/**< Index. */ | ||||||
| 							); | 							); | ||||||
| 
 | 
 | ||||||
| /** Checks whether matrix is square and diagonal.
 | /** Checks whether matrix is square and diagonal.
 | ||||||
|  *	\return BT_TRUE  iff matrix is square and diagonal; \n |  *	\return BT_TRUE  iff matrix is square and diagonal; \n | ||||||
|  *	        BT_FALSE otherwise. */ |  *	        BT_FALSE otherwise. */ | ||||||
| BooleanType DenseMatrix_isDiag( DenseMatrix* _THIS ); | BooleanType DenseMatrix_isDiag( DenseMatrix* _THIS ); | ||||||
| 
 | 
 | ||||||
| /** Get the N-norm of the matrix
 | /** Get the N-norm of the matrix
 | ||||||
|  *  \return N-norm of the matrix |  *  \return N-norm of the matrix | ||||||
|  */ |  */ | ||||||
| real_t DenseMatrix_getNorm( DenseMatrix* _THIS, | real_t DenseMatrix_getNorm( DenseMatrix* _THIS, | ||||||
| 							int type			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ | 							int type			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ | ||||||
| 							); | 							); | ||||||
| 
 | 
 | ||||||
| /** Get the N-norm of a row
 | /** Get the N-norm of a row
 | ||||||
|  *  \return N-norm of row \a rNum |  *  \return N-norm of row \a rNum | ||||||
|  */ |  */ | ||||||
| real_t DenseMatrix_getRowNorm(	DenseMatrix* _THIS, | real_t DenseMatrix_getRowNorm(	DenseMatrix* _THIS, | ||||||
| 								int rNum,			/**< Row number. */ | 								int rNum,			/**< Row number. */ | ||||||
| 								int type			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ | 								int type			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ | ||||||
| 								); | 								); | ||||||
| 
 | 
 | ||||||
| /** Retrieve indexed entries of matrix row multiplied by alpha.
 | /** Retrieve indexed entries of matrix row multiplied by alpha.
 | ||||||
|  *  \return SUCCESSFUL_RETURN */ |  *  \return SUCCESSFUL_RETURN */ | ||||||
| returnValue DenseMatrix_getRow(	DenseMatrix* _THIS, | returnValue DenseMatrix_getRow(	DenseMatrix* _THIS, | ||||||
| 								int rNum,						/**< Row number. */ | 								int rNum,						/**< Row number. */ | ||||||
| 								const Indexlist* const icols,	/**< Index list specifying columns. */ | 								const Indexlist* const icols,	/**< Index list specifying columns. */ | ||||||
| 								real_t alpha,					/**< Scalar factor. */ | 								real_t alpha,					/**< Scalar factor. */ | ||||||
| 								real_t *row						/**< Output row vector. */ | 								real_t *row						/**< Output row vector. */ | ||||||
| 								); | 								); | ||||||
| 
 | 
 | ||||||
| /** Retrieve indexed entries of matrix column multiplied by alpha.
 | /** Retrieve indexed entries of matrix column multiplied by alpha.
 | ||||||
|  *  \return SUCCESSFUL_RETURN */ |  *  \return SUCCESSFUL_RETURN */ | ||||||
|  returnValue DenseMatrix_getCol(	DenseMatrix* _THIS, |  returnValue DenseMatrix_getCol(	DenseMatrix* _THIS, | ||||||
| 									int cNum,						/**< Column number. */ | 									int cNum,						/**< Column number. */ | ||||||
| 									const Indexlist* const irows,	/**< Index list specifying rows. */ | 									const Indexlist* const irows,	/**< Index list specifying rows. */ | ||||||
| 									real_t alpha,					/**< Scalar factor. */ | 									real_t alpha,					/**< Scalar factor. */ | ||||||
| 									real_t *col						/**< Output column vector. */ | 									real_t *col						/**< Output column vector. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Evaluate Y=alpha*A*X + beta*Y.
 | /** Evaluate Y=alpha*A*X + beta*Y.
 | ||||||
|  *  \return SUCCESSFUL_RETURN. */ |  *  \return SUCCESSFUL_RETURN. */ | ||||||
| returnValue DenseMatrix_times(	DenseMatrix* _THIS, | returnValue DenseMatrix_times(	DenseMatrix* _THIS, | ||||||
| 								int xN,					/**< Number of vectors to multiply. */ | 								int xN,					/**< Number of vectors to multiply. */ | ||||||
| 								real_t alpha,			/**< Scalar factor for matrix vector product. */ | 								real_t alpha,			/**< Scalar factor for matrix vector product. */ | ||||||
| 								const real_t *x,		/**< Input vector to be multiplied. */ | 								const real_t *x,		/**< Input vector to be multiplied. */ | ||||||
| 								int xLD,				/**< Leading dimension of input x. */ | 								int xLD,				/**< Leading dimension of input x. */ | ||||||
| 								real_t beta,			/**< Scalar factor for y. */ | 								real_t beta,			/**< Scalar factor for y. */ | ||||||
| 								real_t *y,				/**< Output vector of results. */ | 								real_t *y,				/**< Output vector of results. */ | ||||||
| 								int yLD					/**< Leading dimension of output y. */ | 								int yLD					/**< Leading dimension of output y. */ | ||||||
| 								); | 								); | ||||||
| 
 | 
 | ||||||
| /** Evaluate Y=alpha*A'*X + beta*Y.
 | /** Evaluate Y=alpha*A'*X + beta*Y.
 | ||||||
|  *  \return SUCCESSFUL_RETURN. */ |  *  \return SUCCESSFUL_RETURN. */ | ||||||
| returnValue DenseMatrix_transTimes(	DenseMatrix* _THIS, | returnValue DenseMatrix_transTimes(	DenseMatrix* _THIS, | ||||||
| 									int xN,				/**< Number of vectors to multiply. */ | 									int xN,				/**< Number of vectors to multiply. */ | ||||||
| 									real_t alpha,		/**< Scalar factor for matrix vector product. */ | 									real_t alpha,		/**< Scalar factor for matrix vector product. */ | ||||||
| 									const real_t *x,	/**< Input vector to be multiplied. */ | 									const real_t *x,	/**< Input vector to be multiplied. */ | ||||||
| 									int xLD,			/**< Leading dimension of input x. */ | 									int xLD,			/**< Leading dimension of input x. */ | ||||||
| 									real_t beta,		/**< Scalar factor for y. */ | 									real_t beta,		/**< Scalar factor for y. */ | ||||||
| 									real_t *y,			/**< Output vector of results. */ | 									real_t *y,			/**< Output vector of results. */ | ||||||
| 									int yLD				/**< Leading dimension of output y. */ | 									int yLD				/**< Leading dimension of output y. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Evaluate matrix vector product with submatrix given by Indexlist.
 | /** Evaluate matrix vector product with submatrix given by Indexlist.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
|  returnValue DenseMatrix_subTimes(	DenseMatrix* _THIS, |  returnValue DenseMatrix_subTimes(	DenseMatrix* _THIS, | ||||||
| 									const Indexlist* const irows,	/**< Index list specifying rows. */ | 									const Indexlist* const irows,	/**< Index list specifying rows. */ | ||||||
| 									const Indexlist* const icols,	/**< Index list specifying columns. */ | 									const Indexlist* const icols,	/**< Index list specifying columns. */ | ||||||
| 									int xN,							/**< Number of vectors to multiply. */ | 									int xN,							/**< Number of vectors to multiply. */ | ||||||
| 									real_t alpha,					/**< Scalar factor for matrix vector product. */ | 									real_t alpha,					/**< Scalar factor for matrix vector product. */ | ||||||
| 									const real_t *x,				/**< Input vector to be multiplied. */ | 									const real_t *x,				/**< Input vector to be multiplied. */ | ||||||
| 									int xLD,						/**< Leading dimension of input x. */ | 									int xLD,						/**< Leading dimension of input x. */ | ||||||
| 									real_t beta,					/**< Scalar factor for y. */ | 									real_t beta,					/**< Scalar factor for y. */ | ||||||
| 									real_t *y,						/**< Output vector of results. */ | 									real_t *y,						/**< Output vector of results. */ | ||||||
| 									int yLD,						/**< Leading dimension of output y. */ | 									int yLD,						/**< Leading dimension of output y. */ | ||||||
| 									BooleanType yCompr 				/**< Compressed storage for y. */ | 									BooleanType yCompr 				/**< Compressed storage for y. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Evaluate matrix transpose vector product.
 | /** Evaluate matrix transpose vector product.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue DenseMatrix_subTransTimes(	DenseMatrix* _THIS, | returnValue DenseMatrix_subTransTimes(	DenseMatrix* _THIS, | ||||||
| 										const Indexlist* const irows,	/**< Index list specifying rows. */ | 										const Indexlist* const irows,	/**< Index list specifying rows. */ | ||||||
| 										const Indexlist* const icols,	/**< Index list specifying columns. */ | 										const Indexlist* const icols,	/**< Index list specifying columns. */ | ||||||
| 										int xN,							/**< Number of vectors to multiply. */ | 										int xN,							/**< Number of vectors to multiply. */ | ||||||
| 										real_t alpha,					/**< Scalar factor for matrix vector product. */ | 										real_t alpha,					/**< Scalar factor for matrix vector product. */ | ||||||
| 										const real_t *x,				/**< Input vector to be multiplied. */ | 										const real_t *x,				/**< Input vector to be multiplied. */ | ||||||
| 										int xLD,						/**< Leading dimension of input x. */ | 										int xLD,						/**< Leading dimension of input x. */ | ||||||
| 										real_t beta,					/**< Scalar factor for y. */ | 										real_t beta,					/**< Scalar factor for y. */ | ||||||
| 										real_t *y,						/**< Output vector of results. */ | 										real_t *y,						/**< Output vector of results. */ | ||||||
| 										int yLD							/**< Leading dimension of output y. */ | 										int yLD							/**< Leading dimension of output y. */ | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| /** Adds given offset to diagonal of matrix.
 | /** Adds given offset to diagonal of matrix.
 | ||||||
|  *	\return SUCCESSFUL_RETURN \n |  *	\return SUCCESSFUL_RETURN \n | ||||||
|  			RET_NO_DIAGONAL_AVAILABLE */ |  			RET_NO_DIAGONAL_AVAILABLE */ | ||||||
| returnValue DenseMatrix_addToDiag(	DenseMatrix* _THIS, | returnValue DenseMatrix_addToDiag(	DenseMatrix* _THIS, | ||||||
| 									real_t alpha		/**< Diagonal offset. */ | 									real_t alpha		/**< Diagonal offset. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Prints matrix to screen.
 | /** Prints matrix to screen.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue DenseMatrix_print(	DenseMatrix* _THIS | returnValue DenseMatrix_print(	DenseMatrix* _THIS | ||||||
| 								); | 								); | ||||||
| 
 | 
 | ||||||
| static inline real_t* DenseMatrix_getVal( DenseMatrix* _THIS ) { return _THIS->val; } | static inline real_t* DenseMatrix_getVal( DenseMatrix* _THIS ) { return _THIS->val; } | ||||||
| 
 | 
 | ||||||
| /** Compute bilinear form y = x'*H*x using submatrix given by index list.
 | /** Compute bilinear form y = x'*H*x using submatrix given by index list.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue DenseMatrix_bilinear(	DenseMatrix* _THIS, | returnValue DenseMatrix_bilinear(	DenseMatrix* _THIS, | ||||||
| 									const Indexlist* const icols,	/**< Index list specifying columns of x. */ | 									const Indexlist* const icols,	/**< Index list specifying columns of x. */ | ||||||
| 									int xN,							/**< Number of vectors to multiply. */ | 									int xN,							/**< Number of vectors to multiply. */ | ||||||
| 									const real_t *x,				/**< Input vector to be multiplied (uncompressed). */ | 									const real_t *x,				/**< Input vector to be multiplied (uncompressed). */ | ||||||
| 									int xLD,						/**< Leading dimension of input x. */ | 									int xLD,						/**< Leading dimension of input x. */ | ||||||
| 									real_t *y,						/**< Output vector of results (compressed). */ | 									real_t *y,						/**< Output vector of results (compressed). */ | ||||||
| 									int yLD							/**< Leading dimension of output y. */ | 									int yLD							/**< Leading dimension of output y. */ | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_MATRICES_H */ | #endif	/* QPOASES_MATRICES_H */ | ||||||
|  | |||||||
| @ -1,153 +1,153 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/Options.h |  *	\file include/qpOASES_e/Options.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  * |  * | ||||||
|  *	Declaration of the Options class designed to manage user-specified |  *	Declaration of the Options class designed to manage user-specified | ||||||
|  *	options for solving a QProblem. |  *	options for solving a QProblem. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_OPTIONS_H | #ifndef QPOASES_OPTIONS_H | ||||||
| #define QPOASES_OPTIONS_H | #define QPOASES_OPTIONS_H | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include <qpOASES_e/Utils.h> | #include <qpOASES_e/Utils.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\brief Manages all user-specified options for solving QPs. |  *	\brief Manages all user-specified options for solving QPs. | ||||||
|  * |  * | ||||||
|  *	This class manages all user-specified options used for solving |  *	This class manages all user-specified options used for solving | ||||||
|  *	quadratic programs. |  *	quadratic programs. | ||||||
|  * |  * | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	PrintLevel printLevel;					/**< Print level. */ | 	PrintLevel printLevel;					/**< Print level. */ | ||||||
| 
 | 
 | ||||||
| 	BooleanType enableRamping;				/**< Specifies whether ramping shall be enabled or not. */ | 	BooleanType enableRamping;				/**< Specifies whether ramping shall be enabled or not. */ | ||||||
| 	BooleanType enableFarBounds;			/**< Specifies whether far bounds shall be used or not. */ | 	BooleanType enableFarBounds;			/**< Specifies whether far bounds shall be used or not. */ | ||||||
| 	BooleanType enableFlippingBounds;		/**< Specifies whether flipping bounds shall be used or not. */ | 	BooleanType enableFlippingBounds;		/**< Specifies whether flipping bounds shall be used or not. */ | ||||||
| 	BooleanType enableRegularisation;		/**< Specifies whether Hessian matrix shall be regularised in case semi-definiteness is detected. */ | 	BooleanType enableRegularisation;		/**< Specifies whether Hessian matrix shall be regularised in case semi-definiteness is detected. */ | ||||||
| 	BooleanType enableFullLITests;			/**< Specifies whether condition-hardened LI test shall be used or not. */ | 	BooleanType enableFullLITests;			/**< Specifies whether condition-hardened LI test shall be used or not. */ | ||||||
| 	BooleanType enableNZCTests;				/**< Specifies whether nonzero curvature tests shall be used. */ | 	BooleanType enableNZCTests;				/**< Specifies whether nonzero curvature tests shall be used. */ | ||||||
| 	int enableDriftCorrection;				/**< Specifies the frequency of drift corrections (0 = off). */ | 	int enableDriftCorrection;				/**< Specifies the frequency of drift corrections (0 = off). */ | ||||||
| 	int enableCholeskyRefactorisation;		/**< Specifies the frequency of full refactorisation of proj. Hessian (otherwise updates). */ | 	int enableCholeskyRefactorisation;		/**< Specifies the frequency of full refactorisation of proj. Hessian (otherwise updates). */ | ||||||
| 	BooleanType enableEqualities;			/**< Specifies whether equalities shall be always treated as active constraints. */ | 	BooleanType enableEqualities;			/**< Specifies whether equalities shall be always treated as active constraints. */ | ||||||
| 
 | 
 | ||||||
| 	real_t terminationTolerance;			/**< Termination tolerance. */ | 	real_t terminationTolerance;			/**< Termination tolerance. */ | ||||||
| 	real_t boundTolerance;					/**< Lower/upper (constraints') bound tolerance (an inequality constraint whose lower and upper bounds differ by less is regarded to be an equality constraint). */ | 	real_t boundTolerance;					/**< Lower/upper (constraints') bound tolerance (an inequality constraint whose lower and upper bounds differ by less is regarded to be an equality constraint). */ | ||||||
| 	real_t boundRelaxation;					/**< Offset for relaxing (constraints') bounds at beginning of an initial homotopy. It is also as initial value for far bounds. */ | 	real_t boundRelaxation;					/**< Offset for relaxing (constraints') bounds at beginning of an initial homotopy. It is also as initial value for far bounds. */ | ||||||
| 	real_t epsNum;							/**< Numerator tolerance for ratio tests. */ | 	real_t epsNum;							/**< Numerator tolerance for ratio tests. */ | ||||||
| 	real_t epsDen;							/**< Denominator tolerance for ratio tests. */ | 	real_t epsDen;							/**< Denominator tolerance for ratio tests. */ | ||||||
| 	real_t maxPrimalJump;					/**< Maximum allowed jump in primal variables in nonzero curvature tests. */ | 	real_t maxPrimalJump;					/**< Maximum allowed jump in primal variables in nonzero curvature tests. */ | ||||||
| 	real_t maxDualJump;						/**< Maximum allowed jump in dual variables in linear independence tests. */ | 	real_t maxDualJump;						/**< Maximum allowed jump in dual variables in linear independence tests. */ | ||||||
| 
 | 
 | ||||||
| 	real_t initialRamping;					/**< Start value for Ramping Strategy. */ | 	real_t initialRamping;					/**< Start value for Ramping Strategy. */ | ||||||
| 	real_t finalRamping;					/**< Final value for Ramping Strategy. */ | 	real_t finalRamping;					/**< Final value for Ramping Strategy. */ | ||||||
| 	real_t initialFarBounds;				/**< Initial size of Far Bounds. */ | 	real_t initialFarBounds;				/**< Initial size of Far Bounds. */ | ||||||
| 	real_t growFarBounds;					/**< Factor to grow Far Bounds. */ | 	real_t growFarBounds;					/**< Factor to grow Far Bounds. */ | ||||||
| 	SubjectToStatus initialStatusBounds;	/**< Initial status of bounds at first iteration. */ | 	SubjectToStatus initialStatusBounds;	/**< Initial status of bounds at first iteration. */ | ||||||
| 	real_t epsFlipping;						/**< Tolerance of squared Cholesky diagonal factor which triggers flipping bound. */ | 	real_t epsFlipping;						/**< Tolerance of squared Cholesky diagonal factor which triggers flipping bound. */ | ||||||
| 	int numRegularisationSteps;				/**< Maximum number of successive regularisation steps. */ | 	int numRegularisationSteps;				/**< Maximum number of successive regularisation steps. */ | ||||||
| 	real_t epsRegularisation;				/**< Scaling factor of identity matrix used for Hessian regularisation. */ | 	real_t epsRegularisation;				/**< Scaling factor of identity matrix used for Hessian regularisation. */ | ||||||
| 	int numRefinementSteps;					/**< Maximum number of iterative refinement steps. */ | 	int numRefinementSteps;					/**< Maximum number of iterative refinement steps. */ | ||||||
| 	real_t epsIterRef;						/**< Early termination tolerance for iterative refinement. */ | 	real_t epsIterRef;						/**< Early termination tolerance for iterative refinement. */ | ||||||
| 	real_t epsLITests;						/**< Tolerance for linear independence tests. */ | 	real_t epsLITests;						/**< Tolerance for linear independence tests. */ | ||||||
| 	real_t epsNZCTests;						/**< Tolerance for nonzero curvature tests. */ | 	real_t epsNZCTests;						/**< Tolerance for nonzero curvature tests. */ | ||||||
| 
 | 
 | ||||||
| 	BooleanType enableDropInfeasibles;		/**< ... */ | 	BooleanType enableDropInfeasibles;		/**< ... */ | ||||||
| 	int    dropBoundPriority;				/**< ... */ | 	int    dropBoundPriority;				/**< ... */ | ||||||
| 	int    dropEqConPriority;				/**< ... */ | 	int    dropEqConPriority;				/**< ... */ | ||||||
| 	int    dropIneqConPriority;				/**< ... */ | 	int    dropIneqConPriority;				/**< ... */ | ||||||
| } Options; | } Options; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void OptionsCON(	Options* _THIS | void OptionsCON(	Options* _THIS | ||||||
| 					); | 					); | ||||||
| 
 | 
 | ||||||
| /** Copies all members from given rhs object.
 | /** Copies all members from given rhs object.
 | ||||||
|  *  \return SUCCESSFUL_RETURN */ |  *  \return SUCCESSFUL_RETURN */ | ||||||
| void OptionsCPY(	Options* FROM, | void OptionsCPY(	Options* FROM, | ||||||
| 					Options* TO | 					Options* TO | ||||||
| 					); | 					); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Sets all options to default values.
 | /** Sets all options to default values.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Options_setToDefault(	Options* _THIS | returnValue Options_setToDefault(	Options* _THIS | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Sets all options to values resulting in maximum reliabilty.
 | /** Sets all options to values resulting in maximum reliabilty.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Options_setToReliable(	Options* _THIS | returnValue Options_setToReliable(	Options* _THIS | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Sets all options to values resulting in minimum solution time.
 | /** Sets all options to values resulting in minimum solution time.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Options_setToMPC(		Options* _THIS | returnValue Options_setToMPC(		Options* _THIS | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| /** Same as setToMPC( ), for ensuring backwards compatibility.
 | /** Same as setToMPC( ), for ensuring backwards compatibility.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Options_setToFast(		Options* _THIS | returnValue Options_setToFast(		Options* _THIS | ||||||
| 									); | 									); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Ensures that all options have consistent values by automatically
 | /** Ensures that all options have consistent values by automatically
 | ||||||
|  *	adjusting inconsistent ones. |  *	adjusting inconsistent ones. | ||||||
|  *	Note: This routine cannot (and does not try to) ensure that values |  *	Note: This routine cannot (and does not try to) ensure that values | ||||||
|  *	      are set to reasonable values that make the QP solution work! |  *	      are set to reasonable values that make the QP solution work! | ||||||
|  *	\return SUCCESSFUL_RETURN \n 
 |  *	\return SUCCESSFUL_RETURN \n 
 | ||||||
|  *		    RET_OPTIONS_ADJUSTED */ |  *		    RET_OPTIONS_ADJUSTED */ | ||||||
| returnValue Options_ensureConsistency(	Options* _THIS | returnValue Options_ensureConsistency(	Options* _THIS | ||||||
| 										); | 										); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Prints values of all options.
 | /** Prints values of all options.
 | ||||||
|  *	\return SUCCESSFUL_RETURN */ |  *	\return SUCCESSFUL_RETURN */ | ||||||
| returnValue Options_print(	Options* _THIS | returnValue Options_print(	Options* _THIS | ||||||
| 							); | 							); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_OPTIONS_H */ | #endif	/* QPOASES_OPTIONS_H */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	end of file |  *	end of file | ||||||
|  */ |  */ | ||||||
|  | |||||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,310 +1,310 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/Types.h |  *	\file include/qpOASES_e/Types.h | ||||||
|  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches |  *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2007-2015 |  *	\date 2007-2015 | ||||||
|  * |  * | ||||||
|  *	Declaration of all non-built-in types (except for classes). |  *	Declaration of all non-built-in types (except for classes). | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_TYPES_H | #ifndef QPOASES_TYPES_H | ||||||
| #define QPOASES_TYPES_H | #define QPOASES_TYPES_H | ||||||
| 
 | 
 | ||||||
| #ifdef USE_ACADOS_TYPES | #ifdef USE_ACADOS_TYPES | ||||||
| #include "acados/utils/types.h" | #include "acados/utils/types.h" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /* If your compiler does not support the snprintf() function,
 | /* If your compiler does not support the snprintf() function,
 | ||||||
|  * uncomment the following line and try to compile again. */ |  * uncomment the following line and try to compile again. */ | ||||||
| /* #define __NO_SNPRINTF__ */ | /* #define __NO_SNPRINTF__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line for setting the __DSPACE__ flag. */ | /* Uncomment the following line for setting the __DSPACE__ flag. */ | ||||||
| /* #define __DSPACE__ */ | /* #define __DSPACE__ */ | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line for setting the __XPCTARGET__ flag. */ | /* Uncomment the following line for setting the __XPCTARGET__ flag. */ | ||||||
| /* #define __XPCTARGET__ */ | /* #define __XPCTARGET__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line for setting the __NO_FMATH__ flag. */ | /* Uncomment the following line for setting the __NO_FMATH__ flag. */ | ||||||
| /* #define __NO_FMATH__ */ | /* #define __NO_FMATH__ */ | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line to enable debug information. */ | /* Uncomment the following line to enable debug information. */ | ||||||
| /* #define __DEBUG__ */ | /* #define __DEBUG__ */ | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line to enable suppress any kind of console output. */ | /* Uncomment the following line to enable suppress any kind of console output. */ | ||||||
| /* #define __SUPPRESSANYOUTPUT__ */ | /* #define __SUPPRESSANYOUTPUT__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Forces to always include all implicitly fixed bounds and all equality constraints
 | /** Forces to always include all implicitly fixed bounds and all equality constraints
 | ||||||
|  *  into the initial working set when setting up an auxiliary QP. */ |  *  into the initial working set when setting up an auxiliary QP. */ | ||||||
| #define __ALWAYS_INITIALISE_WITH_ALL_EQUALITIES__ | #define __ALWAYS_INITIALISE_WITH_ALL_EQUALITIES__ | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line to activate the use of an alternative Givens
 | /* Uncomment the following line to activate the use of an alternative Givens
 | ||||||
|  * plane rotation requiring only three multiplications. */ |  * plane rotation requiring only three multiplications. */ | ||||||
| /* #define __USE_THREE_MULTS_GIVENS__ */ | /* #define __USE_THREE_MULTS_GIVENS__ */ | ||||||
| 
 | 
 | ||||||
| /* Uncomment the following line to activate the use of single precision arithmetic. */ | /* Uncomment the following line to activate the use of single precision arithmetic. */ | ||||||
| /* #define __USE_SINGLE_PRECISION__ */ | /* #define __USE_SINGLE_PRECISION__ */ | ||||||
| 
 | 
 | ||||||
| /* The inline keyword is skipped by default as it is not part of the C90 standard.
 | /* The inline keyword is skipped by default as it is not part of the C90 standard.
 | ||||||
|  * However, by uncommenting the following line, use of the inline keyword can be enforced. */ |  * However, by uncommenting the following line, use of the inline keyword can be enforced. */ | ||||||
| /* #define __USE_INLINE__ */ | /* #define __USE_INLINE__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Work-around for Borland BCC 5.5 compiler. */ | /* Work-around for Borland BCC 5.5 compiler. */ | ||||||
| #ifdef __BORLANDC__ | #ifdef __BORLANDC__ | ||||||
| #if __BORLANDC__ < 0x0561 | #if __BORLANDC__ < 0x0561 | ||||||
|   #define __STDC__ 1 |   #define __STDC__ 1 | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Work-around for Microsoft compilers. */ | /* Work-around for Microsoft compilers. */ | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|   #define __NO_SNPRINTF__ |   #define __NO_SNPRINTF__ | ||||||
|   #pragma warning( disable : 4061 4100 4250 4514 4996 ) |   #pragma warning( disable : 4061 4100 4250 4514 4996 ) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Apply pre-processor settings when using qpOASES within auto-generated code. */ | /* Apply pre-processor settings when using qpOASES within auto-generated code. */ | ||||||
| #ifdef __CODE_GENERATION__ | #ifdef __CODE_GENERATION__ | ||||||
|   #define __NO_COPYRIGHT__ |   #define __NO_COPYRIGHT__ | ||||||
|   #define __EXTERNAL_DIMENSIONS__ |   #define __EXTERNAL_DIMENSIONS__ | ||||||
| #endif /* __CODE_GENERATION__ */ | #endif /* __CODE_GENERATION__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Avoid using static variables declaration within functions. */ | /* Avoid using static variables declaration within functions. */ | ||||||
| #ifdef __NO_STATIC__ | #ifdef __NO_STATIC__ | ||||||
|   #define myStatic |   #define myStatic | ||||||
| #else | #else | ||||||
|   #define myStatic static |   #define myStatic static | ||||||
| #endif /* __NO_STATIC__ */ | #endif /* __NO_STATIC__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Skip inline keyword if not specified otherwise. */ | /* Skip inline keyword if not specified otherwise. */ | ||||||
| #ifndef __USE_INLINE__ | #ifndef __USE_INLINE__ | ||||||
|   #define inline |   #define inline | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* Avoid any printing on embedded platforms. */ | /* Avoid any printing on embedded platforms. */ | ||||||
| #if defined(__DSPACE__) || defined(__XPCTARGET__) | #if defined(__DSPACE__) || defined(__XPCTARGET__) | ||||||
|   #define __SUPPRESSANYOUTPUT__ |   #define __SUPPRESSANYOUTPUT__ | ||||||
|   #define __NO_SNPRINTF__ |   #define __NO_SNPRINTF__ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifdef __NO_SNPRINTF__ | #ifdef __NO_SNPRINTF__ | ||||||
|   #if (!defined(_MSC_VER)) || defined(__DSPACE__) || defined(__XPCTARGET__) |   #if (!defined(_MSC_VER)) || defined(__DSPACE__) || defined(__XPCTARGET__) | ||||||
|     /* If snprintf is not available, provide an empty implementation... */ |     /* If snprintf is not available, provide an empty implementation... */ | ||||||
|     int snprintf( char* s, size_t n, const char* format, ... ); |     int snprintf( char* s, size_t n, const char* format, ... ); | ||||||
|   #else |   #else | ||||||
| 	/* ... or substitute snprintf by _snprintf for Microsoft compilers. */ | 	/* ... or substitute snprintf by _snprintf for Microsoft compilers. */ | ||||||
|     #define snprintf _snprintf |     #define snprintf _snprintf | ||||||
|   #endif |   #endif | ||||||
| #endif /* __NO_SNPRINTF__ */ | #endif /* __NO_SNPRINTF__ */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Macro for switching on/off the beginning of the qpOASES namespace definition. */ | /** Macro for switching on/off the beginning of the qpOASES namespace definition. */ | ||||||
| #define BEGIN_NAMESPACE_QPOASES | #define BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| /** Macro for switching on/off the end of the qpOASES namespace definition. */ | /** Macro for switching on/off the end of the qpOASES namespace definition. */ | ||||||
| #define END_NAMESPACE_QPOASES | #define END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| /** Macro for switching on/off the use of the qpOASES namespace. */ | /** Macro for switching on/off the use of the qpOASES namespace. */ | ||||||
| #define USING_NAMESPACE_QPOASES | #define USING_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| /** Macro for switching on/off references to the qpOASES namespace. */ | /** Macro for switching on/off references to the qpOASES namespace. */ | ||||||
| #define REFER_NAMESPACE_QPOASES /*::*/ | #define REFER_NAMESPACE_QPOASES /*::*/ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Macro for accessing the Cholesky factor R. */ | /** Macro for accessing the Cholesky factor R. */ | ||||||
| #define RR( I,J )  _THIS->R[(I)+nV*(J)] | #define RR( I,J )  _THIS->R[(I)+nV*(J)] | ||||||
| 
 | 
 | ||||||
| /** Macro for accessing the orthonormal matrix Q of the QT factorisation. */ | /** Macro for accessing the orthonormal matrix Q of the QT factorisation. */ | ||||||
| #define QQ( I,J )  _THIS->Q[(I)+nV*(J)] | #define QQ( I,J )  _THIS->Q[(I)+nV*(J)] | ||||||
| 
 | 
 | ||||||
| /** Macro for accessing the triangular matrix T of the QT factorisation. */ | /** Macro for accessing the triangular matrix T of the QT factorisation. */ | ||||||
| #define TT( I,J )  _THIS->T[(I)*nVC_min+(J)] | #define TT( I,J )  _THIS->T[(I)*nVC_min+(J)] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Defines real_t for facilitating switching between double and float. */ | /** Defines real_t for facilitating switching between double and float. */ | ||||||
| 
 | 
 | ||||||
| #ifndef USE_ACADOS_TYPES | #ifndef USE_ACADOS_TYPES | ||||||
| #ifndef __CODE_GENERATION__ | #ifndef __CODE_GENERATION__ | ||||||
| 
 | 
 | ||||||
|   #ifdef __USE_SINGLE_PRECISION__ |   #ifdef __USE_SINGLE_PRECISION__ | ||||||
|   typedef float real_t; |   typedef float real_t; | ||||||
|   #else |   #else | ||||||
|   typedef double real_t; |   typedef double real_t; | ||||||
|   #endif /* __USE_SINGLE_PRECISION__ */ |   #endif /* __USE_SINGLE_PRECISION__ */ | ||||||
| 
 | 
 | ||||||
| #endif /* __CODE_GENERATION__ */ | #endif /* __CODE_GENERATION__ */ | ||||||
| #endif /* USE_ACADOS_TYPES */ | #endif /* USE_ACADOS_TYPES */ | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible logical values. */ | /** Summarises all possible logical values. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	BT_FALSE = 0,				/**< Logical value for "false". */ | 	BT_FALSE = 0,				/**< Logical value for "false". */ | ||||||
| 	BT_TRUE						/**< Logical value for "true". */ | 	BT_TRUE						/**< Logical value for "true". */ | ||||||
| } BooleanType; | } BooleanType; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible print levels. Print levels are used to describe
 | /** Summarises all possible print levels. Print levels are used to describe
 | ||||||
|  *	the desired amount of output during runtime of qpOASES. */ |  *	the desired amount of output during runtime of qpOASES. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	PL_DEBUG_ITER = -2,			/**< Full tabular debugging output. */ | 	PL_DEBUG_ITER = -2,			/**< Full tabular debugging output. */ | ||||||
| 	PL_TABULAR,					/**< Tabular output. */ | 	PL_TABULAR,					/**< Tabular output. */ | ||||||
| 	PL_NONE,					/**< No output. */ | 	PL_NONE,					/**< No output. */ | ||||||
| 	PL_LOW,						/**< Print error messages only. */ | 	PL_LOW,						/**< Print error messages only. */ | ||||||
| 	PL_MEDIUM,					/**< Print error and warning messages as well as concise info messages. */ | 	PL_MEDIUM,					/**< Print error and warning messages as well as concise info messages. */ | ||||||
| 	PL_HIGH						/**< Print all messages with full details. */ | 	PL_HIGH						/**< Print all messages with full details. */ | ||||||
| } PrintLevel; | } PrintLevel; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Defines visibility status of a message. */ | /** Defines visibility status of a message. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	VS_HIDDEN,					/**< Message not visible. */ | 	VS_HIDDEN,					/**< Message not visible. */ | ||||||
| 	VS_VISIBLE					/**< Message visible. */ | 	VS_VISIBLE					/**< Message visible. */ | ||||||
| } VisibilityStatus; | } VisibilityStatus; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible states of the (S)QProblem(B) object during the
 | /** Summarises all possible states of the (S)QProblem(B) object during the
 | ||||||
| solution process of a QP sequence. */ | solution process of a QP sequence. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	QPS_NOTINITIALISED,			/**< QProblem object is freshly instantiated or reset. */ | 	QPS_NOTINITIALISED,			/**< QProblem object is freshly instantiated or reset. */ | ||||||
| 	QPS_PREPARINGAUXILIARYQP,	/**< An auxiliary problem is currently setup, either at the very beginning
 | 	QPS_PREPARINGAUXILIARYQP,	/**< An auxiliary problem is currently setup, either at the very beginning
 | ||||||
| 								 *   via an initial homotopy or after changing the QP matrices. */ | 								 *   via an initial homotopy or after changing the QP matrices. */ | ||||||
| 	QPS_AUXILIARYQPSOLVED,		/**< An auxilary problem was solved, either at the very beginning
 | 	QPS_AUXILIARYQPSOLVED,		/**< An auxilary problem was solved, either at the very beginning
 | ||||||
| 								 *   via an initial homotopy or after changing the QP matrices. */ | 								 *   via an initial homotopy or after changing the QP matrices. */ | ||||||
| 	QPS_PERFORMINGHOMOTOPY,		/**< A homotopy according to the main idea of the online active
 | 	QPS_PERFORMINGHOMOTOPY,		/**< A homotopy according to the main idea of the online active
 | ||||||
| 								 *   set strategy is performed. */ | 								 *   set strategy is performed. */ | ||||||
| 	QPS_HOMOTOPYQPSOLVED,		/**< An intermediate QP along the homotopy path was solved. */ | 	QPS_HOMOTOPYQPSOLVED,		/**< An intermediate QP along the homotopy path was solved. */ | ||||||
| 	QPS_SOLVED					/**< The solution of the actual QP was found. */ | 	QPS_SOLVED					/**< The solution of the actual QP was found. */ | ||||||
| } QProblemStatus; | } QProblemStatus; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible types of the QP's Hessian matrix. */ | /** Summarises all possible types of the QP's Hessian matrix. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	HST_ZERO,				/**< Hessian is zero matrix (i.e. LP formulation). */ | 	HST_ZERO,				/**< Hessian is zero matrix (i.e. LP formulation). */ | ||||||
| 	HST_IDENTITY,			/**< Hessian is identity matrix. */ | 	HST_IDENTITY,			/**< Hessian is identity matrix. */ | ||||||
| 	HST_POSDEF,				/**< Hessian is (strictly) positive definite. */ | 	HST_POSDEF,				/**< Hessian is (strictly) positive definite. */ | ||||||
| 	HST_POSDEF_NULLSPACE,	/**< Hessian is positive definite on null space of active bounds/constraints. */ | 	HST_POSDEF_NULLSPACE,	/**< Hessian is positive definite on null space of active bounds/constraints. */ | ||||||
| 	HST_SEMIDEF,			/**< Hessian is positive semi-definite. */ | 	HST_SEMIDEF,			/**< Hessian is positive semi-definite. */ | ||||||
| 	HST_INDEF,				/**< Hessian is indefinite. */ | 	HST_INDEF,				/**< Hessian is indefinite. */ | ||||||
| 	HST_UNKNOWN				/**< Hessian type is unknown. */ | 	HST_UNKNOWN				/**< Hessian type is unknown. */ | ||||||
| } HessianType; | } HessianType; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible types of bounds and constraints. */ | /** Summarises all possible types of bounds and constraints. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	ST_UNBOUNDED,		/**< Bound/constraint is unbounded. */ | 	ST_UNBOUNDED,		/**< Bound/constraint is unbounded. */ | ||||||
| 	ST_BOUNDED,			/**< Bound/constraint is bounded but not fixed. */ | 	ST_BOUNDED,			/**< Bound/constraint is bounded but not fixed. */ | ||||||
| 	ST_EQUALITY,		/**< Bound/constraint is fixed (implicit equality bound/constraint). */ | 	ST_EQUALITY,		/**< Bound/constraint is fixed (implicit equality bound/constraint). */ | ||||||
| 	ST_DISABLED,		/**< Bound/constraint is disabled (i.e. ignored when solving QP). */ | 	ST_DISABLED,		/**< Bound/constraint is disabled (i.e. ignored when solving QP). */ | ||||||
| 	ST_UNKNOWN			/**< Type of bound/constraint unknown. */ | 	ST_UNKNOWN			/**< Type of bound/constraint unknown. */ | ||||||
| } SubjectToType; | } SubjectToType; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Summarises all possible states of bounds and constraints. */ | /** Summarises all possible states of bounds and constraints. */ | ||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
| 	ST_LOWER = -1,			/**< Bound/constraint is at its lower bound. */ | 	ST_LOWER = -1,			/**< Bound/constraint is at its lower bound. */ | ||||||
| 	ST_INACTIVE,			/**< Bound/constraint is inactive. */ | 	ST_INACTIVE,			/**< Bound/constraint is inactive. */ | ||||||
| 	ST_UPPER,				/**< Bound/constraint is at its upper bound. */ | 	ST_UPPER,				/**< Bound/constraint is at its upper bound. */ | ||||||
| 	ST_INFEASIBLE_LOWER,	/**< (to be documented) */ | 	ST_INFEASIBLE_LOWER,	/**< (to be documented) */ | ||||||
| 	ST_INFEASIBLE_UPPER,	/**< (to be documented) */ | 	ST_INFEASIBLE_UPPER,	/**< (to be documented) */ | ||||||
| 	ST_UNDEFINED			/**< Status of bound/constraint undefined. */ | 	ST_UNDEFINED			/**< Status of bound/constraint undefined. */ | ||||||
| } SubjectToStatus; | } SubjectToStatus; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\brief Stores internal information for tabular (debugging) output. |  *	\brief Stores internal information for tabular (debugging) output. | ||||||
|  * |  * | ||||||
|  *	Struct storing internal information for tabular (debugging) output |  *	Struct storing internal information for tabular (debugging) output | ||||||
|  *	when using the (S)QProblem(B) objects. |  *	when using the (S)QProblem(B) objects. | ||||||
|  * |  * | ||||||
|  *	\author Hans Joachim Ferreau |  *	\author Hans Joachim Ferreau | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2013-2015 |  *	\date 2013-2015 | ||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	int idxAddB;		/**< Index of bound that has been added to working set. */ | 	int idxAddB;		/**< Index of bound that has been added to working set. */ | ||||||
| 	int idxRemB;		/**< Index of bound that has been removed from working set. */ | 	int idxRemB;		/**< Index of bound that has been removed from working set. */ | ||||||
| 	int idxAddC;		/**< Index of constraint that has been added to working set. */ | 	int idxAddC;		/**< Index of constraint that has been added to working set. */ | ||||||
| 	int idxRemC;		/**< Index of constraint that has been removed from working set. */ | 	int idxRemC;		/**< Index of constraint that has been removed from working set. */ | ||||||
| 	int excAddB;		/**< Flag indicating whether a bound has been added to working set to keep a regular projected Hessian. */ | 	int excAddB;		/**< Flag indicating whether a bound has been added to working set to keep a regular projected Hessian. */ | ||||||
| 	int excRemB;		/**< Flag indicating whether a bound has been removed from working set to keep a regular projected Hessian. */ | 	int excRemB;		/**< Flag indicating whether a bound has been removed from working set to keep a regular projected Hessian. */ | ||||||
| 	int excAddC;		/**< Flag indicating whether a constraint has been added to working set to keep a regular projected Hessian. */ | 	int excAddC;		/**< Flag indicating whether a constraint has been added to working set to keep a regular projected Hessian. */ | ||||||
| 	int excRemC;		/**< Flag indicating whether a constraint has been removed from working set to keep a regular projected Hessian. */ | 	int excRemC;		/**< Flag indicating whether a constraint has been removed from working set to keep a regular projected Hessian. */ | ||||||
| } TabularOutput; | } TabularOutput; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\brief Struct containing the variable header for mat file. |  *	\brief Struct containing the variable header for mat file. | ||||||
|  * |  * | ||||||
|  *	Struct storing the header of a variable to be stored in |  *	Struct storing the header of a variable to be stored in | ||||||
|  *	Matlab's binary format (using the outdated Level 4 variant |  *	Matlab's binary format (using the outdated Level 4 variant | ||||||
|  *  for simplictiy). |  *  for simplictiy). | ||||||
|  * |  * | ||||||
|  *  Note, this code snippet has been inspired from the document |  *  Note, this code snippet has been inspired from the document | ||||||
|  *  "Matlab(R) MAT-file Format, R2013b" by MathWorks |  *  "Matlab(R) MAT-file Format, R2013b" by MathWorks | ||||||
|  * |  * | ||||||
|  *	\author Hans Joachim Ferreau |  *	\author Hans Joachim Ferreau | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2013-2015 |  *	\date 2013-2015 | ||||||
|  */ |  */ | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
| 	long numericFormat;		/**< Flag indicating numerical format. */ | 	long numericFormat;		/**< Flag indicating numerical format. */ | ||||||
| 	long nRows;				/**< Number of rows. */ | 	long nRows;				/**< Number of rows. */ | ||||||
| 	long nCols;				/**< Number of rows. */ | 	long nCols;				/**< Number of rows. */ | ||||||
| 	long imaginaryPart;		/**< (to be documented) */ | 	long imaginaryPart;		/**< (to be documented) */ | ||||||
| 	long nCharName;			/**< Number of character in name. */ | 	long nCharName;			/**< Number of character in name. */ | ||||||
| } MatMatrixHeader; | } MatMatrixHeader; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_TYPES_H */ | #endif	/* QPOASES_TYPES_H */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	end of file |  *	end of file | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -1,79 +1,79 @@ | |||||||
| /*
 | /*
 | ||||||
|  *	This file is part of qpOASES. |  *	This file is part of qpOASES. | ||||||
|  * |  * | ||||||
|  *	qpOASES -- An Implementation of the Online Active Set Strategy. |  *	qpOASES -- An Implementation of the Online Active Set Strategy. | ||||||
|  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, |  *	Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, | ||||||
|  *	Christian Kirches et al. All rights reserved. |  *	Christian Kirches et al. All rights reserved. | ||||||
|  * |  * | ||||||
|  *	qpOASES is free software; you can redistribute it and/or |  *	qpOASES is free software; you can redistribute it and/or | ||||||
|  *	modify it under the terms of the GNU Lesser General Public |  *	modify it under the terms of the GNU Lesser General Public | ||||||
|  *	License as published by the Free Software Foundation; either |  *	License as published by the Free Software Foundation; either | ||||||
|  *	version 2.1 of the License, or (at your option) any later version. |  *	version 2.1 of the License, or (at your option) any later version. | ||||||
|  * |  * | ||||||
|  *	qpOASES is distributed in the hope that it will be useful, |  *	qpOASES is distributed in the hope that it will be useful, | ||||||
|  *	but WITHOUT ANY WARRANTY; without even the implied warranty of |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||||
|  *	See the GNU Lesser General Public License for more details. |  *	See the GNU Lesser General Public License for more details. | ||||||
|  * |  * | ||||||
|  *	You should have received a copy of the GNU Lesser General Public |  *	You should have received a copy of the GNU Lesser General Public | ||||||
|  *	License along with qpOASES; if not, write to the Free Software |  *	License along with qpOASES; if not, write to the Free Software | ||||||
|  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA |  *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  *	\file include/qpOASES_e/UnitTesting.h |  *	\file include/qpOASES_e/UnitTesting.h | ||||||
|  *	\author Hans Joachim Ferreau |  *	\author Hans Joachim Ferreau | ||||||
|  *	\version 3.1embedded |  *	\version 3.1embedded | ||||||
|  *	\date 2014-2015 |  *	\date 2014-2015 | ||||||
|  * |  * | ||||||
|  *	Definition of auxiliary functions/macros for unit testing. |  *	Definition of auxiliary functions/macros for unit testing. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef QPOASES_UNIT_TESTING_H | #ifndef QPOASES_UNIT_TESTING_H | ||||||
| #define QPOASES_UNIT_TESTING_H | #define QPOASES_UNIT_TESTING_H | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef TEST_TOL_FACTOR | #ifndef TEST_TOL_FACTOR | ||||||
| #define TEST_TOL_FACTOR 1 | #define TEST_TOL_FACTOR 1 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Return value for tests that passed. */ | /** Return value for tests that passed. */ | ||||||
| #define TEST_PASSED 0 | #define TEST_PASSED 0 | ||||||
| 
 | 
 | ||||||
| /** Return value for tests that failed. */ | /** Return value for tests that failed. */ | ||||||
| #define TEST_FAILED 1 | #define TEST_FAILED 1 | ||||||
| 
 | 
 | ||||||
| /** Return value for tests that could not run due to missing external data. */ | /** Return value for tests that could not run due to missing external data. */ | ||||||
| #define TEST_DATA_NOT_FOUND 99 | #define TEST_DATA_NOT_FOUND 99 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** Macro verifying that two numerical values are equal in order to pass unit test. */ | /** Macro verifying that two numerical values are equal in order to pass unit test. */ | ||||||
| #define QPOASES_TEST_FOR_EQUAL( x,y ) if ( REFER_NAMESPACE_QPOASES isEqual( (x),(y) ) == BT_FALSE ) { return TEST_FAILED; } | #define QPOASES_TEST_FOR_EQUAL( x,y ) if ( REFER_NAMESPACE_QPOASES isEqual( (x),(y) ) == BT_FALSE ) { return TEST_FAILED; } | ||||||
| 
 | 
 | ||||||
| /** Macro verifying that two numerical values are close to each other in order to pass unit test. */ | /** Macro verifying that two numerical values are close to each other in order to pass unit test. */ | ||||||
| #define QPOASES_TEST_FOR_NEAR( x,y )  if ( REFER_NAMESPACE_QPOASES getAbs((x)-(y)) / REFER_NAMESPACE_QPOASES getMax( 1.0,REFER_NAMESPACE_QPOASES getAbs(x) ) >= 1e-10 ) { return TEST_FAILED; } | #define QPOASES_TEST_FOR_NEAR( x,y )  if ( REFER_NAMESPACE_QPOASES getAbs((x)-(y)) / REFER_NAMESPACE_QPOASES getMax( 1.0,REFER_NAMESPACE_QPOASES getAbs(x) ) >= 1e-10 ) { return TEST_FAILED; } | ||||||
| 
 | 
 | ||||||
| /** Macro verifying that first quantity is lower or equal than second one in order to pass unit test. */ | /** Macro verifying that first quantity is lower or equal than second one in order to pass unit test. */ | ||||||
| #define QPOASES_TEST_FOR_TOL( x,tol )  if ( (x) > (tol)*(TEST_TOL_FACTOR) ) { return TEST_FAILED; } | #define QPOASES_TEST_FOR_TOL( x,tol )  if ( (x) > (tol)*(TEST_TOL_FACTOR) ) { return TEST_FAILED; } | ||||||
| 
 | 
 | ||||||
| /** Macro verifying that a logical expression holds in order to pass unit test. */ | /** Macro verifying that a logical expression holds in order to pass unit test. */ | ||||||
| #define QPOASES_TEST_FOR_TRUE( x )  if ( (x) == 0 ) { return TEST_FAILED; } | #define QPOASES_TEST_FOR_TRUE( x )  if ( (x) == 0 ) { return TEST_FAILED; } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| BEGIN_NAMESPACE_QPOASES | BEGIN_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| END_NAMESPACE_QPOASES | END_NAMESPACE_QPOASES | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif	/* QPOASES_UNIT_TESTING_H */ | #endif	/* QPOASES_UNIT_TESTING_H */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *	end of file |  *	end of file | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -1,62 +1,62 @@ | |||||||
| /*
 | /*
 | ||||||
|  *  Created by Justin R. Wilson on 2/19/2017. |  *  Created by Justin R. Wilson on 2/19/2017. | ||||||
|  *  Copyright 2017 Justin R. Wilson. All rights reserved. |  *  Copyright 2017 Justin R. Wilson. All rights reserved. | ||||||
|  * |  * | ||||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying |  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||||||
|  */ |  */ | ||||||
| #ifndef TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED | #ifndef TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED | ||||||
| #define TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED | #define TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED | ||||||
| 
 | 
 | ||||||
| // Don't #include any Catch headers here - we can assume they are already
 | // Don't #include any Catch headers here - we can assume they are already
 | ||||||
| // included before this header.
 | // included before this header.
 | ||||||
| // This is not good practice in general but is necessary in this case so this
 | // This is not good practice in general but is necessary in this case so this
 | ||||||
| // file can be distributed as a single header that works with the main
 | // file can be distributed as a single header that works with the main
 | ||||||
| // Catch single header.
 | // Catch single header.
 | ||||||
| 
 | 
 | ||||||
| namespace Catch { | namespace Catch { | ||||||
| 
 | 
 | ||||||
|     struct AutomakeReporter : StreamingReporterBase<AutomakeReporter> { |     struct AutomakeReporter : StreamingReporterBase<AutomakeReporter> { | ||||||
|         AutomakeReporter( ReporterConfig const& _config ) |         AutomakeReporter( ReporterConfig const& _config ) | ||||||
|           :   StreamingReporterBase( _config ) |           :   StreamingReporterBase( _config ) | ||||||
|         {} |         {} | ||||||
| 
 | 
 | ||||||
|         ~AutomakeReporter() override; |         ~AutomakeReporter() override; | ||||||
| 
 | 
 | ||||||
|         static std::string getDescription() { |         static std::string getDescription() { | ||||||
|             return "Reports test results in the format of Automake .trs files"; |             return "Reports test results in the format of Automake .trs files"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void assertionStarting( AssertionInfo const& ) override {} |         void assertionStarting( AssertionInfo const& ) override {} | ||||||
| 
 | 
 | ||||||
|         bool assertionEnded( AssertionStats const& /*_assertionStats*/ ) override { return true; } |         bool assertionEnded( AssertionStats const& /*_assertionStats*/ ) override { return true; } | ||||||
| 
 | 
 | ||||||
|         void testCaseEnded( TestCaseStats const& _testCaseStats ) override { |         void testCaseEnded( TestCaseStats const& _testCaseStats ) override { | ||||||
|             // Possible values to emit are PASS, XFAIL, SKIP, FAIL, XPASS and ERROR.
 |             // Possible values to emit are PASS, XFAIL, SKIP, FAIL, XPASS and ERROR.
 | ||||||
|             stream << ":test-result: "; |             stream << ":test-result: "; | ||||||
|             if (_testCaseStats.totals.assertions.allPassed()) { |             if (_testCaseStats.totals.assertions.allPassed()) { | ||||||
|                 stream << "PASS"; |                 stream << "PASS"; | ||||||
|             } else if (_testCaseStats.totals.assertions.allOk()) { |             } else if (_testCaseStats.totals.assertions.allOk()) { | ||||||
|                 stream << "XFAIL"; |                 stream << "XFAIL"; | ||||||
|             } else { |             } else { | ||||||
|                 stream << "FAIL"; |                 stream << "FAIL"; | ||||||
|             } |             } | ||||||
|             stream << ' ' << _testCaseStats.testInfo.name << '\n'; |             stream << ' ' << _testCaseStats.testInfo.name << '\n'; | ||||||
|             StreamingReporterBase::testCaseEnded( _testCaseStats ); |             StreamingReporterBase::testCaseEnded( _testCaseStats ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void skipTest( TestCaseInfo const& testInfo ) override { |         void skipTest( TestCaseInfo const& testInfo ) override { | ||||||
|             stream << ":test-result: SKIP " << testInfo.name << '\n'; |             stream << ":test-result: SKIP " << testInfo.name << '\n'; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| #ifdef CATCH_IMPL | #ifdef CATCH_IMPL | ||||||
|     AutomakeReporter::~AutomakeReporter() {} |     AutomakeReporter::~AutomakeReporter() {} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     CATCH_REGISTER_REPORTER( "automake", AutomakeReporter) |     CATCH_REGISTER_REPORTER( "automake", AutomakeReporter) | ||||||
| 
 | 
 | ||||||
| } // end namespace Catch
 | } // end namespace Catch
 | ||||||
| 
 | 
 | ||||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED
 | #endif // TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED
 | ||||||
|  | |||||||
| @ -1,181 +1,181 @@ | |||||||
| /*
 | /*
 | ||||||
|  *  Created by Daniel Garcia on 2018-12-04. |  *  Created by Daniel Garcia on 2018-12-04. | ||||||
|  *  Copyright Social Point SL. All rights reserved. |  *  Copyright Social Point SL. All rights reserved. | ||||||
|  * |  * | ||||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying |  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||||||
|  */ |  */ | ||||||
| #ifndef CATCH_REPORTER_SONARQUBE_HPP_INCLUDED | #ifndef CATCH_REPORTER_SONARQUBE_HPP_INCLUDED | ||||||
| #define CATCH_REPORTER_SONARQUBE_HPP_INCLUDED | #define CATCH_REPORTER_SONARQUBE_HPP_INCLUDED | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // Don't #include any Catch headers here - we can assume they are already
 | // Don't #include any Catch headers here - we can assume they are already
 | ||||||
| // included before this header.
 | // included before this header.
 | ||||||
| // This is not good practice in general but is necessary in this case so this
 | // This is not good practice in general but is necessary in this case so this
 | ||||||
| // file can be distributed as a single header that works with the main
 | // file can be distributed as a single header that works with the main
 | ||||||
| // Catch single header.
 | // Catch single header.
 | ||||||
| 
 | 
 | ||||||
| #include <map> | #include <map> | ||||||
| 
 | 
 | ||||||
| namespace Catch { | namespace Catch { | ||||||
| 
 | 
 | ||||||
|     struct SonarQubeReporter : CumulativeReporterBase<SonarQubeReporter> { |     struct SonarQubeReporter : CumulativeReporterBase<SonarQubeReporter> { | ||||||
| 
 | 
 | ||||||
|         SonarQubeReporter(ReporterConfig const& config) |         SonarQubeReporter(ReporterConfig const& config) | ||||||
|         : CumulativeReporterBase(config) |         : CumulativeReporterBase(config) | ||||||
|         , xml(config.stream()) { |         , xml(config.stream()) { | ||||||
|             m_reporterPrefs.shouldRedirectStdOut = true; |             m_reporterPrefs.shouldRedirectStdOut = true; | ||||||
|             m_reporterPrefs.shouldReportAllAssertions = true; |             m_reporterPrefs.shouldReportAllAssertions = true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         ~SonarQubeReporter() override; |         ~SonarQubeReporter() override; | ||||||
| 
 | 
 | ||||||
|         static std::string getDescription() { |         static std::string getDescription() { | ||||||
|             return "Reports test results in the Generic Test Data SonarQube XML format"; |             return "Reports test results in the Generic Test Data SonarQube XML format"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         static std::set<Verbosity> getSupportedVerbosities() { |         static std::set<Verbosity> getSupportedVerbosities() { | ||||||
|             return { Verbosity::Normal }; |             return { Verbosity::Normal }; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void noMatchingTestCases(std::string const& /*spec*/) override {} |         void noMatchingTestCases(std::string const& /*spec*/) override {} | ||||||
| 
 | 
 | ||||||
|         void testRunStarting(TestRunInfo const& testRunInfo) override { |         void testRunStarting(TestRunInfo const& testRunInfo) override { | ||||||
|             CumulativeReporterBase::testRunStarting(testRunInfo); |             CumulativeReporterBase::testRunStarting(testRunInfo); | ||||||
|             xml.startElement("testExecutions"); |             xml.startElement("testExecutions"); | ||||||
|             xml.writeAttribute("version", "1"); |             xml.writeAttribute("version", "1"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void testGroupEnded(TestGroupStats const& testGroupStats) override { |         void testGroupEnded(TestGroupStats const& testGroupStats) override { | ||||||
|             CumulativeReporterBase::testGroupEnded(testGroupStats); |             CumulativeReporterBase::testGroupEnded(testGroupStats); | ||||||
|             writeGroup(*m_testGroups.back()); |             writeGroup(*m_testGroups.back()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void testRunEndedCumulative() override { |         void testRunEndedCumulative() override { | ||||||
|             xml.endElement(); |             xml.endElement(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeGroup(TestGroupNode const& groupNode) { |         void writeGroup(TestGroupNode const& groupNode) { | ||||||
|             std::map<std::string, TestGroupNode::ChildNodes> testsPerFile; |             std::map<std::string, TestGroupNode::ChildNodes> testsPerFile; | ||||||
|             for(auto const& child : groupNode.children) |             for(auto const& child : groupNode.children) | ||||||
|                 testsPerFile[child->value.testInfo.lineInfo.file].push_back(child); |                 testsPerFile[child->value.testInfo.lineInfo.file].push_back(child); | ||||||
| 
 | 
 | ||||||
|             for(auto const& kv : testsPerFile) |             for(auto const& kv : testsPerFile) | ||||||
|                 writeTestFile(kv.first.c_str(), kv.second); |                 writeTestFile(kv.first.c_str(), kv.second); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeTestFile(const char* filename, TestGroupNode::ChildNodes const& testCaseNodes) { |         void writeTestFile(const char* filename, TestGroupNode::ChildNodes const& testCaseNodes) { | ||||||
|             XmlWriter::ScopedElement e = xml.scopedElement("file"); |             XmlWriter::ScopedElement e = xml.scopedElement("file"); | ||||||
|             xml.writeAttribute("path", filename); |             xml.writeAttribute("path", filename); | ||||||
| 
 | 
 | ||||||
|             for(auto const& child : testCaseNodes) |             for(auto const& child : testCaseNodes) | ||||||
|                 writeTestCase(*child); |                 writeTestCase(*child); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeTestCase(TestCaseNode const& testCaseNode) { |         void writeTestCase(TestCaseNode const& testCaseNode) { | ||||||
|             // All test cases have exactly one section - which represents the
 |             // All test cases have exactly one section - which represents the
 | ||||||
|             // test case itself. That section may have 0-n nested sections
 |             // test case itself. That section may have 0-n nested sections
 | ||||||
|             assert(testCaseNode.children.size() == 1); |             assert(testCaseNode.children.size() == 1); | ||||||
|             SectionNode const& rootSection = *testCaseNode.children.front(); |             SectionNode const& rootSection = *testCaseNode.children.front(); | ||||||
|             writeSection("", rootSection, testCaseNode.value.testInfo.okToFail()); |             writeSection("", rootSection, testCaseNode.value.testInfo.okToFail()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeSection(std::string const& rootName, SectionNode const& sectionNode, bool okToFail) { |         void writeSection(std::string const& rootName, SectionNode const& sectionNode, bool okToFail) { | ||||||
|             std::string name = trim(sectionNode.stats.sectionInfo.name); |             std::string name = trim(sectionNode.stats.sectionInfo.name); | ||||||
|             if(!rootName.empty()) |             if(!rootName.empty()) | ||||||
|                 name = rootName + '/' + name; |                 name = rootName + '/' + name; | ||||||
| 
 | 
 | ||||||
|             if(!sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || !sectionNode.stdErr.empty()) { |             if(!sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || !sectionNode.stdErr.empty()) { | ||||||
|                 XmlWriter::ScopedElement e = xml.scopedElement("testCase"); |                 XmlWriter::ScopedElement e = xml.scopedElement("testCase"); | ||||||
|                 xml.writeAttribute("name", name); |                 xml.writeAttribute("name", name); | ||||||
|                 xml.writeAttribute("duration", static_cast<long>(sectionNode.stats.durationInSeconds * 1000)); |                 xml.writeAttribute("duration", static_cast<long>(sectionNode.stats.durationInSeconds * 1000)); | ||||||
| 
 | 
 | ||||||
|                 writeAssertions(sectionNode, okToFail); |                 writeAssertions(sectionNode, okToFail); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             for(auto const& childNode : sectionNode.childSections) |             for(auto const& childNode : sectionNode.childSections) | ||||||
|                 writeSection(name, *childNode, okToFail); |                 writeSection(name, *childNode, okToFail); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeAssertions(SectionNode const& sectionNode, bool okToFail) { |         void writeAssertions(SectionNode const& sectionNode, bool okToFail) { | ||||||
|             for(auto const& assertion : sectionNode.assertions) |             for(auto const& assertion : sectionNode.assertions) | ||||||
|                 writeAssertion( assertion, okToFail); |                 writeAssertion( assertion, okToFail); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void writeAssertion(AssertionStats const& stats, bool okToFail) { |         void writeAssertion(AssertionStats const& stats, bool okToFail) { | ||||||
|             AssertionResult const& result = stats.assertionResult; |             AssertionResult const& result = stats.assertionResult; | ||||||
|             if(!result.isOk()) { |             if(!result.isOk()) { | ||||||
|                 std::string elementName; |                 std::string elementName; | ||||||
|                 if(okToFail) { |                 if(okToFail) { | ||||||
|                     elementName = "skipped"; |                     elementName = "skipped"; | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     switch(result.getResultType()) { |                     switch(result.getResultType()) { | ||||||
|                         case ResultWas::ThrewException: |                         case ResultWas::ThrewException: | ||||||
|                         case ResultWas::FatalErrorCondition: |                         case ResultWas::FatalErrorCondition: | ||||||
|                             elementName = "error"; |                             elementName = "error"; | ||||||
|                             break; |                             break; | ||||||
|                         case ResultWas::ExplicitFailure: |                         case ResultWas::ExplicitFailure: | ||||||
|                             elementName = "failure"; |                             elementName = "failure"; | ||||||
|                             break; |                             break; | ||||||
|                         case ResultWas::ExpressionFailed: |                         case ResultWas::ExpressionFailed: | ||||||
|                             elementName = "failure"; |                             elementName = "failure"; | ||||||
|                             break; |                             break; | ||||||
|                         case ResultWas::DidntThrowException: |                         case ResultWas::DidntThrowException: | ||||||
|                             elementName = "failure"; |                             elementName = "failure"; | ||||||
|                             break; |                             break; | ||||||
| 
 | 
 | ||||||
|                             // We should never see these here:
 |                             // We should never see these here:
 | ||||||
|                         case ResultWas::Info: |                         case ResultWas::Info: | ||||||
|                         case ResultWas::Warning: |                         case ResultWas::Warning: | ||||||
|                         case ResultWas::Ok: |                         case ResultWas::Ok: | ||||||
|                         case ResultWas::Unknown: |                         case ResultWas::Unknown: | ||||||
|                         case ResultWas::FailureBit: |                         case ResultWas::FailureBit: | ||||||
|                         case ResultWas::Exception: |                         case ResultWas::Exception: | ||||||
|                             elementName = "internalError"; |                             elementName = "internalError"; | ||||||
|                             break; |                             break; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 XmlWriter::ScopedElement e = xml.scopedElement(elementName); |                 XmlWriter::ScopedElement e = xml.scopedElement(elementName); | ||||||
| 
 | 
 | ||||||
|                 ReusableStringStream messageRss; |                 ReusableStringStream messageRss; | ||||||
|                 messageRss << result.getTestMacroName() << "(" << result.getExpression() << ")"; |                 messageRss << result.getTestMacroName() << "(" << result.getExpression() << ")"; | ||||||
|                 xml.writeAttribute("message", messageRss.str()); |                 xml.writeAttribute("message", messageRss.str()); | ||||||
| 
 | 
 | ||||||
|                 ReusableStringStream textRss; |                 ReusableStringStream textRss; | ||||||
|                 if (stats.totals.assertions.total() > 0) { |                 if (stats.totals.assertions.total() > 0) { | ||||||
|                     textRss << "FAILED:\n"; |                     textRss << "FAILED:\n"; | ||||||
|                     if (result.hasExpression()) { |                     if (result.hasExpression()) { | ||||||
|                         textRss << "\t" << result.getExpressionInMacro() << "\n"; |                         textRss << "\t" << result.getExpressionInMacro() << "\n"; | ||||||
|                     } |                     } | ||||||
|                     if (result.hasExpandedExpression()) { |                     if (result.hasExpandedExpression()) { | ||||||
|                         textRss << "with expansion:\n\t" << result.getExpandedExpression() << "\n"; |                         textRss << "with expansion:\n\t" << result.getExpandedExpression() << "\n"; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if(!result.getMessage().empty()) |                 if(!result.getMessage().empty()) | ||||||
|                     textRss << result.getMessage() << "\n"; |                     textRss << result.getMessage() << "\n"; | ||||||
| 
 | 
 | ||||||
|                 for(auto const& msg : stats.infoMessages) |                 for(auto const& msg : stats.infoMessages) | ||||||
|                     if(msg.type == ResultWas::Info) |                     if(msg.type == ResultWas::Info) | ||||||
|                         textRss << msg.message << "\n"; |                         textRss << msg.message << "\n"; | ||||||
| 
 | 
 | ||||||
|                 textRss << "at " << result.getSourceInfo(); |                 textRss << "at " << result.getSourceInfo(); | ||||||
|                 xml.writeText(textRss.str(), XmlFormatting::Newline); |                 xml.writeText(textRss.str(), XmlFormatting::Newline); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     private: |     private: | ||||||
|         XmlWriter xml; |         XmlWriter xml; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| #ifdef CATCH_IMPL | #ifdef CATCH_IMPL | ||||||
|     SonarQubeReporter::~SonarQubeReporter() {} |     SonarQubeReporter::~SonarQubeReporter() {} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     CATCH_REGISTER_REPORTER( "sonarqube", SonarQubeReporter ) |     CATCH_REGISTER_REPORTER( "sonarqube", SonarQubeReporter ) | ||||||
| 
 | 
 | ||||||
| } // end namespace Catch
 | } // end namespace Catch
 | ||||||
| 
 | 
 | ||||||
| #endif // CATCH_REPORTER_SONARQUBE_HPP_INCLUDED
 | #endif // CATCH_REPORTER_SONARQUBE_HPP_INCLUDED
 | ||||||
| @ -1,254 +1,254 @@ | |||||||
| /*
 | /*
 | ||||||
|  *  Created by Colton Wolkins on 2015-08-15. |  *  Created by Colton Wolkins on 2015-08-15. | ||||||
|  *  Copyright 2015 Martin Moene. All rights reserved. |  *  Copyright 2015 Martin Moene. All rights reserved. | ||||||
|  * |  * | ||||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying |  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||||||
|  */ |  */ | ||||||
| #ifndef TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED | #ifndef TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED | ||||||
| #define TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED | #define TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // Don't #include any Catch headers here - we can assume they are already
 | // Don't #include any Catch headers here - we can assume they are already
 | ||||||
| // included before this header.
 | // included before this header.
 | ||||||
| // This is not good practice in general but is necessary in this case so this
 | // This is not good practice in general but is necessary in this case so this
 | ||||||
| // file can be distributed as a single header that works with the main
 | // file can be distributed as a single header that works with the main
 | ||||||
| // Catch single header.
 | // Catch single header.
 | ||||||
| 
 | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
| namespace Catch { | namespace Catch { | ||||||
| 
 | 
 | ||||||
|     struct TAPReporter : StreamingReporterBase<TAPReporter> { |     struct TAPReporter : StreamingReporterBase<TAPReporter> { | ||||||
| 
 | 
 | ||||||
|         using StreamingReporterBase::StreamingReporterBase; |         using StreamingReporterBase::StreamingReporterBase; | ||||||
| 
 | 
 | ||||||
|         TAPReporter( ReporterConfig const& config ): |         TAPReporter( ReporterConfig const& config ): | ||||||
|             StreamingReporterBase( config ) { |             StreamingReporterBase( config ) { | ||||||
|             m_reporterPrefs.shouldReportAllAssertions = true; |             m_reporterPrefs.shouldReportAllAssertions = true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         ~TAPReporter() override; |         ~TAPReporter() override; | ||||||
| 
 | 
 | ||||||
|         static std::string getDescription() { |         static std::string getDescription() { | ||||||
|             return "Reports test results in TAP format, suitable for test harnesses"; |             return "Reports test results in TAP format, suitable for test harnesses"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void noMatchingTestCases( std::string const& spec ) override { |         void noMatchingTestCases( std::string const& spec ) override { | ||||||
|             stream << "# No test cases matched '" << spec << "'" << std::endl; |             stream << "# No test cases matched '" << spec << "'" << std::endl; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void assertionStarting( AssertionInfo const& ) override {} |         void assertionStarting( AssertionInfo const& ) override {} | ||||||
| 
 | 
 | ||||||
|         bool assertionEnded( AssertionStats const& _assertionStats ) override { |         bool assertionEnded( AssertionStats const& _assertionStats ) override { | ||||||
|             ++counter; |             ++counter; | ||||||
| 
 | 
 | ||||||
|             stream << "# " << currentTestCaseInfo->name << std::endl; |             stream << "# " << currentTestCaseInfo->name << std::endl; | ||||||
|             AssertionPrinter printer( stream, _assertionStats, counter ); |             AssertionPrinter printer( stream, _assertionStats, counter ); | ||||||
|             printer.print(); |             printer.print(); | ||||||
| 
 | 
 | ||||||
|             stream << std::endl; |             stream << std::endl; | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void testRunEnded( TestRunStats const& _testRunStats ) override { |         void testRunEnded( TestRunStats const& _testRunStats ) override { | ||||||
|             printTotals( _testRunStats.totals ); |             printTotals( _testRunStats.totals ); | ||||||
|             stream << "\n" << std::endl; |             stream << "\n" << std::endl; | ||||||
|             StreamingReporterBase::testRunEnded( _testRunStats ); |             StreamingReporterBase::testRunEnded( _testRunStats ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     private: |     private: | ||||||
|         std::size_t counter = 0; |         std::size_t counter = 0; | ||||||
|         class AssertionPrinter { |         class AssertionPrinter { | ||||||
|         public: |         public: | ||||||
|             AssertionPrinter& operator= ( AssertionPrinter const& ) = delete; |             AssertionPrinter& operator= ( AssertionPrinter const& ) = delete; | ||||||
|             AssertionPrinter( AssertionPrinter const& ) = delete; |             AssertionPrinter( AssertionPrinter const& ) = delete; | ||||||
|             AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, std::size_t _counter ) |             AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, std::size_t _counter ) | ||||||
|             : stream( _stream ) |             : stream( _stream ) | ||||||
|             , result( _stats.assertionResult ) |             , result( _stats.assertionResult ) | ||||||
|             , messages( _stats.infoMessages ) |             , messages( _stats.infoMessages ) | ||||||
|             , itMessage( _stats.infoMessages.begin() ) |             , itMessage( _stats.infoMessages.begin() ) | ||||||
|             , printInfoMessages( true ) |             , printInfoMessages( true ) | ||||||
|             , counter(_counter) |             , counter(_counter) | ||||||
|             {} |             {} | ||||||
| 
 | 
 | ||||||
|             void print() { |             void print() { | ||||||
|                 itMessage = messages.begin(); |                 itMessage = messages.begin(); | ||||||
| 
 | 
 | ||||||
|                 switch( result.getResultType() ) { |                 switch( result.getResultType() ) { | ||||||
|                     case ResultWas::Ok: |                     case ResultWas::Ok: | ||||||
|                         printResultType( passedString() ); |                         printResultType( passedString() ); | ||||||
|                         printOriginalExpression(); |                         printOriginalExpression(); | ||||||
|                         printReconstructedExpression(); |                         printReconstructedExpression(); | ||||||
|                         if ( ! result.hasExpression() ) |                         if ( ! result.hasExpression() ) | ||||||
|                             printRemainingMessages( Colour::None ); |                             printRemainingMessages( Colour::None ); | ||||||
|                         else |                         else | ||||||
|                             printRemainingMessages(); |                             printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::ExpressionFailed: |                     case ResultWas::ExpressionFailed: | ||||||
|                         if (result.isOk()) { |                         if (result.isOk()) { | ||||||
|                             printResultType(passedString()); |                             printResultType(passedString()); | ||||||
|                         } else { |                         } else { | ||||||
|                             printResultType(failedString()); |                             printResultType(failedString()); | ||||||
|                         } |                         } | ||||||
|                         printOriginalExpression(); |                         printOriginalExpression(); | ||||||
|                         printReconstructedExpression(); |                         printReconstructedExpression(); | ||||||
|                         if (result.isOk()) { |                         if (result.isOk()) { | ||||||
|                             printIssue(" # TODO"); |                             printIssue(" # TODO"); | ||||||
|                         } |                         } | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::ThrewException: |                     case ResultWas::ThrewException: | ||||||
|                         printResultType( failedString() ); |                         printResultType( failedString() ); | ||||||
|                         printIssue( "unexpected exception with message:" ); |                         printIssue( "unexpected exception with message:" ); | ||||||
|                         printMessage(); |                         printMessage(); | ||||||
|                         printExpressionWas(); |                         printExpressionWas(); | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::FatalErrorCondition: |                     case ResultWas::FatalErrorCondition: | ||||||
|                         printResultType( failedString() ); |                         printResultType( failedString() ); | ||||||
|                         printIssue( "fatal error condition with message:" ); |                         printIssue( "fatal error condition with message:" ); | ||||||
|                         printMessage(); |                         printMessage(); | ||||||
|                         printExpressionWas(); |                         printExpressionWas(); | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::DidntThrowException: |                     case ResultWas::DidntThrowException: | ||||||
|                         printResultType( failedString() ); |                         printResultType( failedString() ); | ||||||
|                         printIssue( "expected exception, got none" ); |                         printIssue( "expected exception, got none" ); | ||||||
|                         printExpressionWas(); |                         printExpressionWas(); | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::Info: |                     case ResultWas::Info: | ||||||
|                         printResultType( "info" ); |                         printResultType( "info" ); | ||||||
|                         printMessage(); |                         printMessage(); | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::Warning: |                     case ResultWas::Warning: | ||||||
|                         printResultType( "warning" ); |                         printResultType( "warning" ); | ||||||
|                         printMessage(); |                         printMessage(); | ||||||
|                         printRemainingMessages(); |                         printRemainingMessages(); | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::ExplicitFailure: |                     case ResultWas::ExplicitFailure: | ||||||
|                         printResultType( failedString() ); |                         printResultType( failedString() ); | ||||||
|                         printIssue( "explicitly" ); |                         printIssue( "explicitly" ); | ||||||
|                         printRemainingMessages( Colour::None ); |                         printRemainingMessages( Colour::None ); | ||||||
|                         break; |                         break; | ||||||
|                     // These cases are here to prevent compiler warnings
 |                     // These cases are here to prevent compiler warnings
 | ||||||
|                     case ResultWas::Unknown: |                     case ResultWas::Unknown: | ||||||
|                     case ResultWas::FailureBit: |                     case ResultWas::FailureBit: | ||||||
|                     case ResultWas::Exception: |                     case ResultWas::Exception: | ||||||
|                         printResultType( "** internal error **" ); |                         printResultType( "** internal error **" ); | ||||||
|                         break; |                         break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|         private: |         private: | ||||||
|             static Colour::Code dimColour() { return Colour::FileName; } |             static Colour::Code dimColour() { return Colour::FileName; } | ||||||
| 
 | 
 | ||||||
|             static const char* failedString() { return "not ok"; } |             static const char* failedString() { return "not ok"; } | ||||||
|             static const char* passedString() { return "ok"; } |             static const char* passedString() { return "ok"; } | ||||||
| 
 | 
 | ||||||
|             void printSourceInfo() const { |             void printSourceInfo() const { | ||||||
|                 Colour colourGuard( dimColour() ); |                 Colour colourGuard( dimColour() ); | ||||||
|                 stream << result.getSourceInfo() << ":"; |                 stream << result.getSourceInfo() << ":"; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printResultType( std::string const& passOrFail ) const { |             void printResultType( std::string const& passOrFail ) const { | ||||||
|                 if( !passOrFail.empty() ) { |                 if( !passOrFail.empty() ) { | ||||||
|                     stream << passOrFail << ' ' << counter << " -"; |                     stream << passOrFail << ' ' << counter << " -"; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printIssue( std::string const& issue ) const { |             void printIssue( std::string const& issue ) const { | ||||||
|                 stream << " " << issue; |                 stream << " " << issue; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printExpressionWas() { |             void printExpressionWas() { | ||||||
|                 if( result.hasExpression() ) { |                 if( result.hasExpression() ) { | ||||||
|                     stream << ";"; |                     stream << ";"; | ||||||
|                     { |                     { | ||||||
|                         Colour colour( dimColour() ); |                         Colour colour( dimColour() ); | ||||||
|                         stream << " expression was:"; |                         stream << " expression was:"; | ||||||
|                     } |                     } | ||||||
|                     printOriginalExpression(); |                     printOriginalExpression(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printOriginalExpression() const { |             void printOriginalExpression() const { | ||||||
|                 if( result.hasExpression() ) { |                 if( result.hasExpression() ) { | ||||||
|                     stream << " " << result.getExpression(); |                     stream << " " << result.getExpression(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printReconstructedExpression() const { |             void printReconstructedExpression() const { | ||||||
|                 if( result.hasExpandedExpression() ) { |                 if( result.hasExpandedExpression() ) { | ||||||
|                     { |                     { | ||||||
|                         Colour colour( dimColour() ); |                         Colour colour( dimColour() ); | ||||||
|                         stream << " for: "; |                         stream << " for: "; | ||||||
|                     } |                     } | ||||||
|                     std::string expr = result.getExpandedExpression(); |                     std::string expr = result.getExpandedExpression(); | ||||||
|                     std::replace( expr.begin(), expr.end(), '\n', ' '); |                     std::replace( expr.begin(), expr.end(), '\n', ' '); | ||||||
|                     stream << expr; |                     stream << expr; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printMessage() { |             void printMessage() { | ||||||
|                 if ( itMessage != messages.end() ) { |                 if ( itMessage != messages.end() ) { | ||||||
|                     stream << " '" << itMessage->message << "'"; |                     stream << " '" << itMessage->message << "'"; | ||||||
|                     ++itMessage; |                     ++itMessage; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             void printRemainingMessages( Colour::Code colour = dimColour() ) { |             void printRemainingMessages( Colour::Code colour = dimColour() ) { | ||||||
|                 if (itMessage == messages.end()) { |                 if (itMessage == messages.end()) { | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 const auto itEnd = messages.cend(); |                 const auto itEnd = messages.cend(); | ||||||
|                 const auto N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) ); |                 const auto N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) ); | ||||||
| 
 | 
 | ||||||
|                 { |                 { | ||||||
|                     Colour colourGuard( colour ); |                     Colour colourGuard( colour ); | ||||||
|                     stream << " with " << pluralise( N, "message" ) << ":"; |                     stream << " with " << pluralise( N, "message" ) << ":"; | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 while( itMessage != itEnd ) { |                 while( itMessage != itEnd ) { | ||||||
|                     // If this assertion is a warning ignore any INFO messages
 |                     // If this assertion is a warning ignore any INFO messages
 | ||||||
|                     if( printInfoMessages || itMessage->type != ResultWas::Info ) { |                     if( printInfoMessages || itMessage->type != ResultWas::Info ) { | ||||||
|                         stream << " '" << itMessage->message << "'"; |                         stream << " '" << itMessage->message << "'"; | ||||||
|                         if ( ++itMessage != itEnd ) { |                         if ( ++itMessage != itEnd ) { | ||||||
|                             Colour colourGuard( dimColour() ); |                             Colour colourGuard( dimColour() ); | ||||||
|                             stream << " and"; |                             stream << " and"; | ||||||
|                         } |                         } | ||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
|                     ++itMessage; |                     ++itMessage; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|         private: |         private: | ||||||
|             std::ostream& stream; |             std::ostream& stream; | ||||||
|             AssertionResult const& result; |             AssertionResult const& result; | ||||||
|             std::vector<MessageInfo> messages; |             std::vector<MessageInfo> messages; | ||||||
|             std::vector<MessageInfo>::const_iterator itMessage; |             std::vector<MessageInfo>::const_iterator itMessage; | ||||||
|             bool printInfoMessages; |             bool printInfoMessages; | ||||||
|             std::size_t counter; |             std::size_t counter; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         void printTotals( const Totals& totals ) const { |         void printTotals( const Totals& totals ) const { | ||||||
|             stream << "1.." << totals.assertions.total(); |             stream << "1.." << totals.assertions.total(); | ||||||
|             if( totals.testCases.total() == 0 ) { |             if( totals.testCases.total() == 0 ) { | ||||||
|                 stream << " # Skipped: No tests ran."; |                 stream << " # Skipped: No tests ran."; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| #ifdef CATCH_IMPL | #ifdef CATCH_IMPL | ||||||
|     TAPReporter::~TAPReporter() {} |     TAPReporter::~TAPReporter() {} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     CATCH_REGISTER_REPORTER( "tap", TAPReporter ) |     CATCH_REGISTER_REPORTER( "tap", TAPReporter ) | ||||||
| 
 | 
 | ||||||
| } // end namespace Catch
 | } // end namespace Catch
 | ||||||
| 
 | 
 | ||||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED
 | #endif // TWOBLUECUBES_CATCH_REPORTER_TAP_HPP_INCLUDED
 | ||||||
|  | |||||||
| @ -1,219 +1,219 @@ | |||||||
| /*
 | /*
 | ||||||
|  *  Created by Phil Nash on 19th December 2014 |  *  Created by Phil Nash on 19th December 2014 | ||||||
|  *  Copyright 2014 Two Blue Cubes Ltd. All rights reserved. |  *  Copyright 2014 Two Blue Cubes Ltd. All rights reserved. | ||||||
|  * |  * | ||||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying |  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||||||
|  */ |  */ | ||||||
| #ifndef TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED | #ifndef TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED | ||||||
| #define TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED | #define TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED | ||||||
| 
 | 
 | ||||||
| // Don't #include any Catch headers here - we can assume they are already
 | // Don't #include any Catch headers here - we can assume they are already
 | ||||||
| // included before this header.
 | // included before this header.
 | ||||||
| // This is not good practice in general but is necessary in this case so this
 | // This is not good practice in general but is necessary in this case so this
 | ||||||
| // file can be distributed as a single header that works with the main
 | // file can be distributed as a single header that works with the main
 | ||||||
| // Catch single header.
 | // Catch single header.
 | ||||||
| 
 | 
 | ||||||
| #include <cstring> | #include <cstring> | ||||||
| 
 | 
 | ||||||
| #ifdef __clang__ | #ifdef __clang__ | ||||||
| #   pragma clang diagnostic push | #   pragma clang diagnostic push | ||||||
| #   pragma clang diagnostic ignored "-Wpadded" | #   pragma clang diagnostic ignored "-Wpadded" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| namespace Catch { | namespace Catch { | ||||||
| 
 | 
 | ||||||
|     struct TeamCityReporter : StreamingReporterBase<TeamCityReporter> { |     struct TeamCityReporter : StreamingReporterBase<TeamCityReporter> { | ||||||
|         TeamCityReporter( ReporterConfig const& _config ) |         TeamCityReporter( ReporterConfig const& _config ) | ||||||
|         :   StreamingReporterBase( _config ) |         :   StreamingReporterBase( _config ) | ||||||
|         { |         { | ||||||
|             m_reporterPrefs.shouldRedirectStdOut = true; |             m_reporterPrefs.shouldRedirectStdOut = true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         static std::string escape( std::string const& str ) { |         static std::string escape( std::string const& str ) { | ||||||
|             std::string escaped = str; |             std::string escaped = str; | ||||||
|             replaceInPlace( escaped, "|", "||" ); |             replaceInPlace( escaped, "|", "||" ); | ||||||
|             replaceInPlace( escaped, "'", "|'" ); |             replaceInPlace( escaped, "'", "|'" ); | ||||||
|             replaceInPlace( escaped, "\n", "|n" ); |             replaceInPlace( escaped, "\n", "|n" ); | ||||||
|             replaceInPlace( escaped, "\r", "|r" ); |             replaceInPlace( escaped, "\r", "|r" ); | ||||||
|             replaceInPlace( escaped, "[", "|[" ); |             replaceInPlace( escaped, "[", "|[" ); | ||||||
|             replaceInPlace( escaped, "]", "|]" ); |             replaceInPlace( escaped, "]", "|]" ); | ||||||
|             return escaped; |             return escaped; | ||||||
|         } |         } | ||||||
|         ~TeamCityReporter() override; |         ~TeamCityReporter() override; | ||||||
| 
 | 
 | ||||||
|         static std::string getDescription() { |         static std::string getDescription() { | ||||||
|             return "Reports test results as TeamCity service messages"; |             return "Reports test results as TeamCity service messages"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void skipTest( TestCaseInfo const& /* testInfo */ ) override { |         void skipTest( TestCaseInfo const& /* testInfo */ ) override { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void noMatchingTestCases( std::string const& /* spec */ ) override {} |         void noMatchingTestCases( std::string const& /* spec */ ) override {} | ||||||
| 
 | 
 | ||||||
|         void testGroupStarting( GroupInfo const& groupInfo ) override { |         void testGroupStarting( GroupInfo const& groupInfo ) override { | ||||||
|             StreamingReporterBase::testGroupStarting( groupInfo ); |             StreamingReporterBase::testGroupStarting( groupInfo ); | ||||||
|             stream << "##teamcity[testSuiteStarted name='" |             stream << "##teamcity[testSuiteStarted name='" | ||||||
|                 << escape( groupInfo.name ) << "']\n"; |                 << escape( groupInfo.name ) << "']\n"; | ||||||
|         } |         } | ||||||
|         void testGroupEnded( TestGroupStats const& testGroupStats ) override { |         void testGroupEnded( TestGroupStats const& testGroupStats ) override { | ||||||
|             StreamingReporterBase::testGroupEnded( testGroupStats ); |             StreamingReporterBase::testGroupEnded( testGroupStats ); | ||||||
|             stream << "##teamcity[testSuiteFinished name='" |             stream << "##teamcity[testSuiteFinished name='" | ||||||
|                 << escape( testGroupStats.groupInfo.name ) << "']\n"; |                 << escape( testGroupStats.groupInfo.name ) << "']\n"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         void assertionStarting( AssertionInfo const& ) override {} |         void assertionStarting( AssertionInfo const& ) override {} | ||||||
| 
 | 
 | ||||||
|         bool assertionEnded( AssertionStats const& assertionStats ) override { |         bool assertionEnded( AssertionStats const& assertionStats ) override { | ||||||
|             AssertionResult const& result = assertionStats.assertionResult; |             AssertionResult const& result = assertionStats.assertionResult; | ||||||
|             if( !result.isOk() ) { |             if( !result.isOk() ) { | ||||||
| 
 | 
 | ||||||
|                 ReusableStringStream msg; |                 ReusableStringStream msg; | ||||||
|                 if( !m_headerPrintedForThisSection ) |                 if( !m_headerPrintedForThisSection ) | ||||||
|                     printSectionHeader( msg.get() ); |                     printSectionHeader( msg.get() ); | ||||||
|                 m_headerPrintedForThisSection = true; |                 m_headerPrintedForThisSection = true; | ||||||
| 
 | 
 | ||||||
|                 msg << result.getSourceInfo() << "\n"; |                 msg << result.getSourceInfo() << "\n"; | ||||||
| 
 | 
 | ||||||
|                 switch( result.getResultType() ) { |                 switch( result.getResultType() ) { | ||||||
|                     case ResultWas::ExpressionFailed: |                     case ResultWas::ExpressionFailed: | ||||||
|                         msg << "expression failed"; |                         msg << "expression failed"; | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::ThrewException: |                     case ResultWas::ThrewException: | ||||||
|                         msg << "unexpected exception"; |                         msg << "unexpected exception"; | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::FatalErrorCondition: |                     case ResultWas::FatalErrorCondition: | ||||||
|                         msg << "fatal error condition"; |                         msg << "fatal error condition"; | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::DidntThrowException: |                     case ResultWas::DidntThrowException: | ||||||
|                         msg << "no exception was thrown where one was expected"; |                         msg << "no exception was thrown where one was expected"; | ||||||
|                         break; |                         break; | ||||||
|                     case ResultWas::ExplicitFailure: |                     case ResultWas::ExplicitFailure: | ||||||
|                         msg << "explicit failure"; |                         msg << "explicit failure"; | ||||||
|                         break; |                         break; | ||||||
| 
 | 
 | ||||||
|                     // We shouldn't get here because of the isOk() test
 |                     // We shouldn't get here because of the isOk() test
 | ||||||
|                     case ResultWas::Ok: |                     case ResultWas::Ok: | ||||||
|                     case ResultWas::Info: |                     case ResultWas::Info: | ||||||
|                     case ResultWas::Warning: |                     case ResultWas::Warning: | ||||||
|                         CATCH_ERROR( "Internal error in TeamCity reporter" ); |                         CATCH_ERROR( "Internal error in TeamCity reporter" ); | ||||||
|                     // These cases are here to prevent compiler warnings
 |                     // These cases are here to prevent compiler warnings
 | ||||||
|                     case ResultWas::Unknown: |                     case ResultWas::Unknown: | ||||||
|                     case ResultWas::FailureBit: |                     case ResultWas::FailureBit: | ||||||
|                     case ResultWas::Exception: |                     case ResultWas::Exception: | ||||||
|                         CATCH_ERROR( "Not implemented" ); |                         CATCH_ERROR( "Not implemented" ); | ||||||
|                 } |                 } | ||||||
|                 if( assertionStats.infoMessages.size() == 1 ) |                 if( assertionStats.infoMessages.size() == 1 ) | ||||||
|                     msg << " with message:"; |                     msg << " with message:"; | ||||||
|                 if( assertionStats.infoMessages.size() > 1 ) |                 if( assertionStats.infoMessages.size() > 1 ) | ||||||
|                     msg << " with messages:"; |                     msg << " with messages:"; | ||||||
|                 for( auto const& messageInfo : assertionStats.infoMessages ) |                 for( auto const& messageInfo : assertionStats.infoMessages ) | ||||||
|                     msg << "\n  \"" << messageInfo.message << "\""; |                     msg << "\n  \"" << messageInfo.message << "\""; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|                 if( result.hasExpression() ) { |                 if( result.hasExpression() ) { | ||||||
|                     msg << |                     msg << | ||||||
|                         "\n  " << result.getExpressionInMacro() << "\n" |                         "\n  " << result.getExpressionInMacro() << "\n" | ||||||
|                         "with expansion:\n" << |                         "with expansion:\n" << | ||||||
|                         "  " << result.getExpandedExpression() << "\n"; |                         "  " << result.getExpandedExpression() << "\n"; | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if( currentTestCaseInfo->okToFail() ) { |                 if( currentTestCaseInfo->okToFail() ) { | ||||||
|                     msg << "- failure ignore as test marked as 'ok to fail'\n"; |                     msg << "- failure ignore as test marked as 'ok to fail'\n"; | ||||||
|                     stream << "##teamcity[testIgnored" |                     stream << "##teamcity[testIgnored" | ||||||
|                            << " name='" << escape( currentTestCaseInfo->name )<< "'" |                            << " name='" << escape( currentTestCaseInfo->name )<< "'" | ||||||
|                            << " message='" << escape( msg.str() ) << "'" |                            << " message='" << escape( msg.str() ) << "'" | ||||||
|                            << "]\n"; |                            << "]\n"; | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     stream << "##teamcity[testFailed" |                     stream << "##teamcity[testFailed" | ||||||
|                            << " name='" << escape( currentTestCaseInfo->name )<< "'" |                            << " name='" << escape( currentTestCaseInfo->name )<< "'" | ||||||
|                            << " message='" << escape( msg.str() ) << "'" |                            << " message='" << escape( msg.str() ) << "'" | ||||||
|                            << "]\n"; |                            << "]\n"; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             stream.flush(); |             stream.flush(); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void sectionStarting( SectionInfo const& sectionInfo ) override { |         void sectionStarting( SectionInfo const& sectionInfo ) override { | ||||||
|             m_headerPrintedForThisSection = false; |             m_headerPrintedForThisSection = false; | ||||||
|             StreamingReporterBase::sectionStarting( sectionInfo ); |             StreamingReporterBase::sectionStarting( sectionInfo ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void testCaseStarting( TestCaseInfo const& testInfo ) override { |         void testCaseStarting( TestCaseInfo const& testInfo ) override { | ||||||
|             m_testTimer.start(); |             m_testTimer.start(); | ||||||
|             StreamingReporterBase::testCaseStarting( testInfo ); |             StreamingReporterBase::testCaseStarting( testInfo ); | ||||||
|             stream << "##teamcity[testStarted name='" |             stream << "##teamcity[testStarted name='" | ||||||
|                 << escape( testInfo.name ) << "']\n"; |                 << escape( testInfo.name ) << "']\n"; | ||||||
|             stream.flush(); |             stream.flush(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         void testCaseEnded( TestCaseStats const& testCaseStats ) override { |         void testCaseEnded( TestCaseStats const& testCaseStats ) override { | ||||||
|             StreamingReporterBase::testCaseEnded( testCaseStats ); |             StreamingReporterBase::testCaseEnded( testCaseStats ); | ||||||
|             if( !testCaseStats.stdOut.empty() ) |             if( !testCaseStats.stdOut.empty() ) | ||||||
|                 stream << "##teamcity[testStdOut name='" |                 stream << "##teamcity[testStdOut name='" | ||||||
|                     << escape( testCaseStats.testInfo.name ) |                     << escape( testCaseStats.testInfo.name ) | ||||||
|                     << "' out='" << escape( testCaseStats.stdOut ) << "']\n"; |                     << "' out='" << escape( testCaseStats.stdOut ) << "']\n"; | ||||||
|             if( !testCaseStats.stdErr.empty() ) |             if( !testCaseStats.stdErr.empty() ) | ||||||
|                 stream << "##teamcity[testStdErr name='" |                 stream << "##teamcity[testStdErr name='" | ||||||
|                     << escape( testCaseStats.testInfo.name ) |                     << escape( testCaseStats.testInfo.name ) | ||||||
|                     << "' out='" << escape( testCaseStats.stdErr ) << "']\n"; |                     << "' out='" << escape( testCaseStats.stdErr ) << "']\n"; | ||||||
|             stream << "##teamcity[testFinished name='" |             stream << "##teamcity[testFinished name='" | ||||||
|                     << escape( testCaseStats.testInfo.name ) << "' duration='" |                     << escape( testCaseStats.testInfo.name ) << "' duration='" | ||||||
|                     << m_testTimer.getElapsedMilliseconds() << "']\n"; |                     << m_testTimer.getElapsedMilliseconds() << "']\n"; | ||||||
|             stream.flush(); |             stream.flush(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     private: |     private: | ||||||
|         void printSectionHeader( std::ostream& os ) { |         void printSectionHeader( std::ostream& os ) { | ||||||
|             assert( !m_sectionStack.empty() ); |             assert( !m_sectionStack.empty() ); | ||||||
| 
 | 
 | ||||||
|             if( m_sectionStack.size() > 1 ) { |             if( m_sectionStack.size() > 1 ) { | ||||||
|                 os << getLineOfChars<'-'>() << "\n"; |                 os << getLineOfChars<'-'>() << "\n"; | ||||||
| 
 | 
 | ||||||
|                 std::vector<SectionInfo>::const_iterator |                 std::vector<SectionInfo>::const_iterator | ||||||
|                 it = m_sectionStack.begin()+1, // Skip first section (test case)
 |                 it = m_sectionStack.begin()+1, // Skip first section (test case)
 | ||||||
|                 itEnd = m_sectionStack.end(); |                 itEnd = m_sectionStack.end(); | ||||||
|                 for( ; it != itEnd; ++it ) |                 for( ; it != itEnd; ++it ) | ||||||
|                     printHeaderString( os, it->name ); |                     printHeaderString( os, it->name ); | ||||||
|                 os << getLineOfChars<'-'>() << "\n"; |                 os << getLineOfChars<'-'>() << "\n"; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; |             SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; | ||||||
| 
 | 
 | ||||||
|             os << lineInfo << "\n"; |             os << lineInfo << "\n"; | ||||||
|             os << getLineOfChars<'.'>() << "\n\n"; |             os << getLineOfChars<'.'>() << "\n\n"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // if string has a : in first line will set indent to follow it on
 |         // if string has a : in first line will set indent to follow it on
 | ||||||
|         // subsequent lines
 |         // subsequent lines
 | ||||||
|         static void printHeaderString( std::ostream& os, std::string const& _string, std::size_t indent = 0 ) { |         static void printHeaderString( std::ostream& os, std::string const& _string, std::size_t indent = 0 ) { | ||||||
|             std::size_t i = _string.find( ": " ); |             std::size_t i = _string.find( ": " ); | ||||||
|             if( i != std::string::npos ) |             if( i != std::string::npos ) | ||||||
|                 i+=2; |                 i+=2; | ||||||
|             else |             else | ||||||
|                 i = 0; |                 i = 0; | ||||||
|             os << Column( _string ) |             os << Column( _string ) | ||||||
|                            .indent( indent+i) |                            .indent( indent+i) | ||||||
|                            .initialIndent( indent ) << "\n"; |                            .initialIndent( indent ) << "\n"; | ||||||
|         } |         } | ||||||
|     private: |     private: | ||||||
|         bool m_headerPrintedForThisSection = false; |         bool m_headerPrintedForThisSection = false; | ||||||
|         Timer m_testTimer; |         Timer m_testTimer; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| #ifdef CATCH_IMPL | #ifdef CATCH_IMPL | ||||||
|     TeamCityReporter::~TeamCityReporter() {} |     TeamCityReporter::~TeamCityReporter() {} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     CATCH_REGISTER_REPORTER( "teamcity", TeamCityReporter ) |     CATCH_REGISTER_REPORTER( "teamcity", TeamCityReporter ) | ||||||
| 
 | 
 | ||||||
| } // end namespace Catch
 | } // end namespace Catch
 | ||||||
| 
 | 
 | ||||||
| #ifdef __clang__ | #ifdef __clang__ | ||||||
| #   pragma clang diagnostic pop | #   pragma clang diagnostic pop | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED
 | #endif // TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED
 | ||||||
|  | |||||||
| @ -1,127 +1,127 @@ | |||||||
| //=============================================================================
 | //=============================================================================
 | ||||||
| //
 | //
 | ||||||
| //  Copyright (c) 2021-2022 Qualcomm Technologies, Inc.
 | //  Copyright (c) 2021-2022 Qualcomm Technologies, Inc.
 | ||||||
| //  All Rights Reserved.
 | //  All Rights Reserved.
 | ||||||
| //  Confidential and Proprietary - Qualcomm Technologies, Inc.
 | //  Confidential and Proprietary - Qualcomm Technologies, Inc.
 | ||||||
| //
 | //
 | ||||||
| //=============================================================================
 | //=============================================================================
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef DL_SYSTEM_IOBUFFER_DATATYPE_MAP_HPP | #ifndef DL_SYSTEM_IOBUFFER_DATATYPE_MAP_HPP | ||||||
| #define DL_SYSTEM_IOBUFFER_DATATYPE_MAP_HPP | #define DL_SYSTEM_IOBUFFER_DATATYPE_MAP_HPP | ||||||
| 
 | 
 | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include "DlSystem/DlEnums.hpp" | #include "DlSystem/DlEnums.hpp" | ||||||
| 
 | 
 | ||||||
| namespace DlSystem | namespace DlSystem | ||||||
| { | { | ||||||
|    // Forward declaration of IOBufferDataTypeMapImpl implementation.
 |    // Forward declaration of IOBufferDataTypeMapImpl implementation.
 | ||||||
|    class IOBufferDataTypeMapImpl; |    class IOBufferDataTypeMapImpl; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| namespace zdl | namespace zdl | ||||||
| { | { | ||||||
| namespace DlSystem | namespace DlSystem | ||||||
| { | { | ||||||
| /** @addtogroup c_plus_plus_apis C++
 | /** @addtogroup c_plus_plus_apis C++
 | ||||||
| @{ */ | @{ */ | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * @brief . |  * @brief . | ||||||
|  * |  * | ||||||
|  * The IoBufferDataTypeMap class definition |  * The IoBufferDataTypeMap class definition | ||||||
|  */ |  */ | ||||||
| class ZDL_EXPORT IOBufferDataTypeMap final | class ZDL_EXPORT IOBufferDataTypeMap final | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|     * @brief . |     * @brief . | ||||||
|     * |     * | ||||||
|     * Creates a new Buffer Data type map |     * Creates a new Buffer Data type map | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    IOBufferDataTypeMap(); |    IOBufferDataTypeMap(); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Adds a name and the corresponding buffer data type |     * @brief Adds a name and the corresponding buffer data type | ||||||
|     *        to the map |     *        to the map | ||||||
|     * |     * | ||||||
|     * @param[name] name The name of the buffer |     * @param[name] name The name of the buffer | ||||||
|     * @param[bufferDataType] buffer Data Type of the buffer |     * @param[bufferDataType] buffer Data Type of the buffer | ||||||
|     * |     * | ||||||
|     * @note If a buffer with the same name already exists, no new |     * @note If a buffer with the same name already exists, no new | ||||||
|     *       buffer is added. |     *       buffer is added. | ||||||
|     */ |     */ | ||||||
|    void add(const char* name, zdl::DlSystem::IOBufferDataType_t bufferDataType); |    void add(const char* name, zdl::DlSystem::IOBufferDataType_t bufferDataType); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Removes a buffer name from the map |     * @brief Removes a buffer name from the map | ||||||
|     * |     * | ||||||
|     * @param[name] name The name of the buffer |     * @param[name] name The name of the buffer | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    void remove(const char* name); |    void remove(const char* name); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Returns the type of the named buffer |     * @brief Returns the type of the named buffer | ||||||
|     * |     * | ||||||
|     * @param[name] name The name of the buffer |     * @param[name] name The name of the buffer | ||||||
|     * |     * | ||||||
|     * @return The type of the buffer, or UNSPECIFIED if the buffer does not exist |     * @return The type of the buffer, or UNSPECIFIED if the buffer does not exist | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    zdl::DlSystem::IOBufferDataType_t getBufferDataType(const char* name); |    zdl::DlSystem::IOBufferDataType_t getBufferDataType(const char* name); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Returns the type of the first buffer |     * @brief Returns the type of the first buffer | ||||||
|     * |     * | ||||||
|     * @return The type of the first buffer, or UNSPECIFIED if the map is empty. |     * @return The type of the first buffer, or UNSPECIFIED if the map is empty. | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    zdl::DlSystem::IOBufferDataType_t getBufferDataType(); |    zdl::DlSystem::IOBufferDataType_t getBufferDataType(); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Returns the size of the buffer type map. |     * @brief Returns the size of the buffer type map. | ||||||
|     * |     * | ||||||
|     * @return The size of the map |     * @return The size of the map | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    size_t size(); |    size_t size(); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Checks the existence of the named buffer in the map |     * @brief Checks the existence of the named buffer in the map | ||||||
|     * |     * | ||||||
|     * @return True if the named buffer exists, false otherwise. |     * @return True if the named buffer exists, false otherwise. | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    bool find(const char* name); |    bool find(const char* name); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Resets the map |     * @brief Resets the map | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    void clear(); |    void clear(); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Checks whether the map is empty |     * @brief Checks whether the map is empty | ||||||
|     * |     * | ||||||
|     * @return True if the map is empty, false otherwise. |     * @return True if the map is empty, false otherwise. | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    bool empty(); |    bool empty(); | ||||||
| 
 | 
 | ||||||
|    /**
 |    /**
 | ||||||
|     * @brief Destroys the map |     * @brief Destroys the map | ||||||
|     * |     * | ||||||
|     */ |     */ | ||||||
|    ~IOBufferDataTypeMap(); |    ~IOBufferDataTypeMap(); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|    std::shared_ptr<::DlSystem::IOBufferDataTypeMapImpl> m_IOBufferDataTypeMapImpl; |    std::shared_ptr<::DlSystem::IOBufferDataTypeMapImpl> m_IOBufferDataTypeMapImpl; | ||||||
| }; | }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | |||||||
					Loading…
					
					
				
		Reference in new issue