|
Boost Users : |
Subject: [Boost-users] Testing algorithms don't use more than a concept provides
From: athor (thorena_at_[hidden])
Date: 2009-03-12 06:25:11
I'm trying to verify an algorithm doesn't use more than a certain concept
provides. For example, if the algorithm checks for an ForwardIterator it
must not use the i-- operator. I'm currently testing this by creating a
minimal abstract class for each concept and then testing if the algorithm
compiles using only the minimal as input.
I have a few issues with this approach.
1. I have to maintain two definitions, one concept and one minimal
implementation.
2. I have to write minimal implementations for all the boost/stl
containers/concepts I want to use.
I guess someone must have had the same problem before, is there a better way
to do this? Maybe even some existing boost functionality I am unaware of?
In code:
------------------------
#define CONCEPT_USER(function, call, targ1) \
struct ConceptUser_##function##_##targ1 \
{ \
targ1& _1; \
void Check() \
{ \
function##call; \
} \
};
struct Interface { virtual void Foo() const = 0; };
template<typename T> void f(int n, const T& t) { t.Foo(); }
CONCEPT_USER(f, (47, _1), Interface); // Compiles
template<typename T> void g(double x, const T& t) { t.Foo(); t.Bar(); }
CONCEPT_USER(g, (3.14, _1), Interface); // Compile Error. g also uses
the function Bar.
------------------------
-- View this message in context: http://www.nabble.com/Testing-algorithms-don%27t-use-more-than-a-concept-provides-tp22471694p22471694.html Sent from the Boost - Users mailing list archive at Nabble.com.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net