NEURON
test_common.h
Go to the documentation of this file.
1 #ifdef __cplusplus
2 
3 #include <array>
4 #include <fstream>
5 #include <string>
6 #include <cmath>
7 
8 constexpr double EPSILON = 0x1p-16; // 1>>16 for double
9 
10 template <size_t T>
11 bool approximate(const std::array<double, T>& reference, Object* v) {
13  const double* v_values = nrn_vector_data(v);
14  if (v_size != reference.size()) {
15  std::cerr << "Bad array length: " << v_size << "!=" << reference.size() << std::endl;
16  return false;
17  }
18  for (int i = 0; i < v_size; i++) {
19  // Uncomment to create ref: Diplay EXACT doubles (no conversion to decimal)
20  // printf("Vec[%d] %a\n", i, v_values[i]);
21  if (std::fabs(v_values[i] - reference[i]) > EPSILON) {
22  std::cerr << "DIFF at line " << i << ": " << v_values[i] << "!=" << reference[i]
23  << std::endl;
24  return false;
25  }
26  }
27  return true;
28 }
29 #endif
#define v
Definition: md1redef.h:11
#define i
Definition: md1redef.h:19
#define EPSILON
Definition: ivocvect.cpp:134
static double v_size(void *v)
Definition: ivocvect.cpp:1351
fabs
Definition: extdef.h:3
double * nrn_vector_data(Object *vec)
Definition: neuronapi.cpp:569
int nrn_vector_capacity(const Object *vec)
Definition: neuronapi.cpp:564
Definition: hocdec.h:173