Jpp  18.0.0-rc.4
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JHashCollection.cc File Reference

Example program to test JTOOLS::JHashCollection class. More...

#include <iostream>
#include <iomanip>
#include <cmath>
#include <set>
#include "JTools/JHashCollection.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to test JTOOLS::JHashCollection class.

Author
mdejong

Definition in file JHashCollection.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 54 of file JHashCollection.cc.

55 {
56  using namespace std;
57 
58  double precision;
59  int debug;
60 
61  try {
62 
63  JParser<> zap("Example program to test hash collection.");
64 
65  zap['e'] = make_field(precision) = 1.0e-3;
66  zap['d'] = make_field(debug) = 3;
67 
68  zap(argc, argv);
69  }
70  catch(const exception &error) {
71  FATAL(error.what() << endl);
72  }
73 
74 
75  using namespace JPP;
76 
77  typedef JHashCollection<double, get_value> hash_collection;
78 
79  hash_collection buffer(precision);
80 
81 
82  set<double> input = { 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 };
83  set<double> rm = { 1.5, 1.1 };
84 
85  for (set<double>::const_reverse_iterator x = input.rbegin(); x != input.rend(); ++x) {
86  buffer.insert(*x);
87  buffer.insert(*x);
88  }
89 
90  for (hash_collection::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
91  DEBUG(FIXED(5,2) << *i << endl);
92  }
93 
94  ASSERT(buffer.size() == input.size(), "Test of buffer size with multiple inserts of same element.");
95 
96 
97  for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
98 
99  DEBUG(FIXED(5,2) << *x << ' ' << buffer.getIndex(*x) << endl);
100 
101  ASSERT(buffer.has(*x), "Test of buffer content.");
102  }
103 
104  {
105  hash_collection out(precision);
106 
107  out = buffer;
108 
109  for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
110 
111  DEBUG(FIXED(5,2) << *x << ' ' << out.getIndex(*x) << endl);
112 
113  ASSERT(out.has(*x), "Test of buffer content after assignment.");
114  }
115  }
116 
117  for (set<double>::const_iterator x = rm.begin(); x != rm.end(); ++x) {
118 
119  hash_collection::iterator p = buffer.find(*x);
120 
121  DEBUG("find " << FIXED(5,2) << *x << " at position " << distance(buffer.begin(),p) << ' ' << buffer.getIndex(*x) << endl);
122 
123  buffer.erase(p);
124  }
125 
126  for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
127 
128  ASSERT(buffer.has(*x) == (rm.count(*x) == 0), "Test of buffer content after erase.");
129  }
130 
131  return 0;
132 }
Utility class to parse command line options.
Definition: JParser.hh:1514
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
then rm
Definition: sftpput.zsh:30
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62