#!/bin/sh
# autopkgtest check: Build and run a program against libann
# (C) 2014 Anton Gladky

set -e

WORKDIR=$(mktemp -d)
trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
cp ann_test.cpp $WORKDIR/
cp rand.cpp $WORKDIR/
cp rand.h $WORKDIR/

cd $WORKDIR

cat <<EOF > test1.in
  validate on
  stats query_stats
  dim 2
  data_size 20
  query_size 10
read_data_pts test1-data.pts
read_query_pts test1-query.pts
  bucket_size 1
  near_neigh 3
  split_rule suggest
  shrink_rule none
build_ann
  epsilon 0.0
run_queries standard
run_queries priority

EOF

cat <<EOF > test1.save
------------------------------------------------------------
ann_test: Version 1.0 
    Copyright: David M. Mount and Sunil Arya.
    Latest Revision: Mar 1, 2005.
------------------------------------------------------------

validate = on   (Warning: this may slow execution time.)
stats = query_stats
[Read Data Points:
  data_size  = 20
  file_name  = test1-data.pts
  dim        = 2
]
[Read Query Points:
  query_size = 10
  file_name  = test1-query.pts
  dim        = 2
]
[Build ann-structure:
  split_rule    = suggest
  shrink_rule   = none
  data_size     = 20
  dim           = 2
  bucket_size   = 1
  process_time  = 0 sec
  (Structure Statistics:
    n_nodes          = 39 (opt = 40, best if < 400)
        n_leaves     = 20 (0 contain no points)
        n_splits     = 19
        n_shrinks    = 0
    empty_leaves     = 0 percent (best if < 50 percent)
    depth            = 6 (opt = 4, best if < 17)
    avg_aspect_ratio = 1.48847 (best if < 20)
  )
]
(Computing true nearest neighbors for validation.  This may take time.)
[Run Queries:
  query_size    = 10
  dim           = 2
  search_method = standard
  epsilon       = 0
  near_neigh    = 3
  true_nn       = 13
  query_time    = 0 sec/query (biased by perf measurements)
  (Performance stats:  [      mean :    stddev ]<      min ,       max >
    leaf_nodes       = [       6.3 :     2.751 ]<        4 ,        11 >
    splitting_nodes  = [       8.8 :     3.676 ]<        5 ,        15 >
    shrinking_nodes  = [         0 :         0 ]<        0 ,         0 >
    total_nodes      = [      15.1 :      6.35 ]<        9 ,        26 >
    points_visited   = [       6.3 :     2.751 ]<        4 ,        11 >
    coord_hits/pt    = [      0.57 :    0.2201 ]<     0.35 ,      0.95 >
    floating_ops_(K) = [     0.156 :    0.0563 ]<    0.101 ,     0.254 >
    average_error    = [         0 :         0 ]<        0 ,         0 >
    rank_error       = [         0 :         0 ]<        0 ,         0 >
  )
]
[Run Queries:
  query_size    = 10
  dim           = 2
  search_method = priority
  epsilon       = 0
  near_neigh    = 3
  true_nn       = 13
  query_time    = 0 sec/query (biased by perf measurements)
  (Performance stats:  [      mean :    stddev ]<      min ,       max >
    leaf_nodes       = [       5.9 :     2.025 ]<        4 ,         9 >
    splitting_nodes  = [       8.7 :     3.498 ]<        5 ,        15 >
    shrinking_nodes  = [         0 :         0 ]<        0 ,         0 >
    total_nodes      = [      14.6 :      5.42 ]<        9 ,        24 >
    points_visited   = [       5.9 :     2.025 ]<        4 ,         9 >
    coord_hits/pt    = [     0.535 :    0.1667 ]<     0.35 ,       0.8 >
    floating_ops_(K) = [    0.1719 :   0.05861 ]<    0.114 ,     0.267 >
    average_error    = [         0 :         0 ]<        0 ,         0 >
    rank_error       = [         0 :         0 ]<        0 ,         0 >
  )
]

EOF

cat <<EOF > test1-data.pts
-0.297462	0.176102
0.565538	-0.361496
0.909313	-0.182785
0.920712	0.478408
0.167682	0.0499836
0.305223	-0.0805835
0.114973	0.882453
0.742916	0.16376
0.0724605	-0.826775
0.690960	-0.559284
0.188485	-0.643934
0.749427	-0.942415
-0.970662	-0.223466
0.916110	0.879597
0.927417	-0.382593
-0.711327	0.278713
-0.519172	0.986146
0.135338	0.924588
-0.0837537	0.61687
0.0520465	0.896306

EOF

cat <<EOF > test1-query.pts
0.0902484	-0.207129
-0.419567	0.485743
0.826225	-0.30962
0.694758	0.987088
-0.410807	-0.465182
-0.836501	0.490184
0.588289	0.656408
0.325807	0.38721
-0.532226	-0.727036
-0.52506	-0.853508

EOF

g++ -o demo ann_test.cpp rand.cpp -lann 
echo "build: OK"
[ -x demo ]
./demo < test1.in
echo "run: OK"
