#ifdef NVECTORTEST
// g++ -O3 -march=athlon -DNVECTORTEST -I../shared/ nvectortest.cc -o nvectortest

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

#include "nvector.h"

const int dim = 5;
typedef Vec::nvector<float,dim> vec_t;

void print(vec_t &a,char *fmt)
{
  printf("[");
  for(int i=0; i<dim-1; i++){
    printf(fmt,a.v[i]);
    printf(",");
  }
  printf(fmt,a.v[dim-1]);
  printf("]");
}

int main()
{
  int i,j,k;

  const int num = 1000;

  vec_t pts[num];

  for(i=0; i<num; i++){
    for(j=0; j<dim; j++){
      pts[i].v[j] = drand48();
    }
  }

  vec_t a,b,c,d;

  copy(a,pts[1]);
  copy(b,pts[2]);

  add(c,a,b);
  sub(c,c,b);
  printf("%f\n",dist(a,c));

  add(c,a,b);
  sub(c,b);
  printf("%f\n",dist(a,c));

  sub(c,a,b);
  printf("%f\n",length(c) - dist(a,b));

  mul(c,b,M_PI);
  div(c,M_PI);
  printf("%f\n",dist(b,c));

  norm(c,b);
  copy(d,b);
  norm(d);
  printf("%f\n",dist(c,d));
  printf("%f\n",length(c)-1);

  neg(c,a);
  copy(d,a);
  neg(d);
  printf("%f\n",dist(c,d));

  // d = -a
  // c = 2d = -2a
  // d = d - c = -a - -2a = a
  mul(c,d,2);
  sub(d,c);
  printf("%f\n",dist(a,d));

  printf("%f\n",dot(a,a) - sqlength(a));

  if(false){
    for(i=0; i<dim; i++){
      unit(a,i);
      print(a,"%7.4f"); printf("\n");
    }
  }

  return(0);
}

#endif
