File: cu_pc_util.c

package info (click to toggle)
pgpointcloud 1.2.5-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,892 kB
  • sloc: sql: 40,767; ansic: 11,045; xml: 935; makefile: 297; cpp: 282; perl: 248; python: 178; sh: 92
file content (104 lines) | stat: -rw-r--r-- 2,793 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/***********************************************************************
 * cu_pc_util.c
 *
 *        Testing for the util functions
 *
 * Portions Copyright (c) 2017, Oslandia
 *
 ***********************************************************************/

#include "CUnit/Basic.h"
#include "cu_tester.h"

/* GLOBALS ************************************************************/

static PCSCHEMA *schema = NULL;
static const char *xmlfile = "data/pdal-schema.xml";

/* Setup/teardown for this suite */
static int init_suite(void)
{
  char *xmlstr = file_to_str(xmlfile);
  schema = pc_schema_from_xml(xmlstr);
  pcfree(xmlstr);
  if (!schema)
    return 1;

  return 0;
}

static int clean_suite(void)
{
  pc_schema_free(schema);
  return 0;
}

/* TESTS **************************************************************/

static void test_bounding_diagonal_wkb_from_bounds()
{
  PCBOUNDS bounds;
  size_t wkbsize;
  uint8_t *wkb;
  char *wkbhex;

  bounds.xmin = -10;
  bounds.xmax = 10;
  bounds.ymin = -10;
  bounds.ymax = 10;

  wkb = pc_bounding_diagonal_wkb_from_bounds(&bounds, schema, &wkbsize);
  CU_ASSERT(wkb != NULL);
  CU_ASSERT(wkbsize == 41);

  wkbhex = pc_hexbytes_from_bytes(wkb, wkbsize);
  CU_ASSERT(wkbhex != NULL);
  CU_ASSERT_STRING_EQUAL(wkbhex, "01020000000200000000000000000024C000000000000"
                                 "024C000000000000024400000000000002440");

  pcfree(wkb);
  pcfree(wkbhex);
}

static void test_bounding_diagonal_wkb_from_stats()
{
  PCSTATS *stats;
  size_t wkbsize;
  uint8_t *wkb;
  char *wkbhex;

  stats = pc_stats_new(schema);

  pc_point_set_x(&stats->min, -10);
  pc_point_set_x(&stats->max, 10);
  pc_point_set_y(&stats->min, -10);
  pc_point_set_y(&stats->max, 10);
  pc_point_set_z(&stats->min, -10);
  pc_point_set_z(&stats->max, 10);

  wkb = pc_bounding_diagonal_wkb_from_stats(stats, &wkbsize);
  CU_ASSERT(wkb != NULL);
  CU_ASSERT(wkbsize == 73);

  wkbhex = pc_hexbytes_from_bytes(wkb, wkbsize);
  CU_ASSERT(wkbhex != NULL);
  CU_ASSERT_STRING_EQUAL(wkbhex,
                         "01020000C00200000000000000000024C000000000000024C0000"
                         "00000000024C00000000000000000000000000000244000000000"
                         "0000244000000000000024400000000000000000");

  pc_stats_free(stats);
  pcfree(wkb);
  pcfree(wkbhex);
}

/* REGISTER ***********************************************************/

CU_TestInfo util_tests[] = {PC_TEST(test_bounding_diagonal_wkb_from_bounds),
                            PC_TEST(test_bounding_diagonal_wkb_from_stats),
                            CU_TEST_INFO_NULL};

CU_SuiteInfo util_suite = {.pName = "util",
                           .pInitFunc = init_suite,
                           .pCleanupFunc = clean_suite,
                           .pTests = util_tests};