mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: dictionary checking methods with predicates on the input values
- can be used to check the validity of input values.
Example:
dict.getCheck<label>("nIters", greaterOp1<label>(0));
dict.getCheck<scalar>("relax", scalarMinMax::zero_one());
- use 'get' prefix for more regular dictionary methods.
Eg, getOrDefault() as alternative to lookupOrDefault()
- additional ops for convenient construction of predicates
ENH: make dictionary writeOptionalEntries integer
- allow triggering of Fatal if default values are used
ENH: additional scalarRange static methods: ge0, gt0, zero_one
- use GREAT instead of VGREAT for internal placeholders
- additional MinMax static methods: gt, le
This commit is contained in:
committed by
Andrew Heather
parent
b043be3063
commit
32916fa845
@ -36,6 +36,8 @@ Description
|
||||
#include "FlatOutput.H"
|
||||
#include "Tuple2.H"
|
||||
#include "StringStream.H"
|
||||
#include "ops.H"
|
||||
#include "bitSet.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
@ -44,7 +46,7 @@ void doTest(const scalarList& values, const predicates::scalars& accept)
|
||||
{
|
||||
// Also tests that output is suppressed
|
||||
Info<<"Have: " << accept.size() << " predicates" << accept << endl;
|
||||
Info<<"values: " << flatOutput(values) << endl;
|
||||
Info<<"values: " << flatOutput(values) << endl;
|
||||
|
||||
for (const scalar& value : values)
|
||||
{
|
||||
@ -60,6 +62,30 @@ void doTest(const scalarList& values, const predicates::scalars& accept)
|
||||
}
|
||||
|
||||
|
||||
template<class Predicate>
|
||||
void testPredicate(const scalarList& values, const Predicate& pred)
|
||||
{
|
||||
bitSet matches;
|
||||
|
||||
label i=0;
|
||||
|
||||
for (const scalar& value : values)
|
||||
{
|
||||
if (pred(value))
|
||||
{
|
||||
matches.set(i);
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
IndirectList<scalar> matched(values, matches.toc());
|
||||
|
||||
Info<< "matched: " << flatOutput(matched.addressing())
|
||||
<< " = " << flatOutput(matched) << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
@ -149,6 +175,16 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
|
||||
Info<< nl << "Test with ops" << nl;
|
||||
Info<<"values: " << flatOutput(values) << endl;
|
||||
{
|
||||
testPredicate(values, lessOp1<scalar>(10));
|
||||
testPredicate(values, greaterOp1<scalar>(100));
|
||||
|
||||
// Also with dissimilar type
|
||||
testPredicate(values, lessEqOp1<label>(0));
|
||||
}
|
||||
|
||||
Info<< "\nEnd\n" << endl;
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user