static void test_patch_filter() { int i; int npts = 20; PCPOINTLIST *pl1, *pl2; PCPATCH *pa1, *pa2, *pa3, *pa4; char *str1, *str2; pl1 = pc_pointlist_make(npts); pl2 = pc_pointlist_make(npts); for ( i = 0; i < npts; i++ ) { PCPOINT *pt1 = pc_point_make(simpleschema); PCPOINT *pt2 = pc_point_make(simpleschema); pc_point_set_double_by_name(pt1, "x", i); pc_point_set_double_by_name(pt1, "y", i); pc_point_set_double_by_name(pt1, "Z", i*0.1); pc_point_set_double_by_name(pt1, "intensity", 100-i); pc_pointlist_add_point(pl1, pt1); pc_point_set_double_by_name(pt2, "x", i); pc_point_set_double_by_name(pt2, "y", i); pc_point_set_double_by_name(pt2, "Z", i*0.1); pc_point_set_double_by_name(pt2, "intensity", 100-i); pc_pointlist_add_point(pl2, pt2); } // PCPATCH* pc_patch_filter(const PCPATCH *pa, uint32_t dimnum, PC_FILTERTYPE filter, double val1, double val2); pa1 = (PCPATCH*)pc_patch_dimensional_from_pointlist(pl1); // printf("pa1\n%s\n", pc_patch_to_string(pa1)); pa2 = pc_patch_filter(pa1, 0, PC_GT, 17, 20); str1 = pc_patch_to_string(pa2); // printf("pa2\n%s\n", str1); CU_ASSERT_STRING_EQUAL(str1, "{\"pcid\":0,\"pts\":[[18,18,1.8,82],[19,19,1.9,81]]}"); pa3 = (PCPATCH*)pc_patch_uncompressed_from_pointlist(pl2); // printf("\npa3\n%s\n", pc_patch_to_string(pa3)); pa4 = pc_patch_filter(pa3, 0, PC_GT, 17, 20); str2 = pc_patch_to_string(pa4); // printf("\npa4\n%s\n", str2); CU_ASSERT_STRING_EQUAL(str2, "{\"pcid\":0,\"pts\":[[18,18,1.8,82],[19,19,1.9,81]]}"); pcfree(str1); pcfree(str2); pc_pointlist_free(pl1); pc_pointlist_free(pl2); pc_patch_free(pa1); pc_patch_free(pa3); pc_patch_free(pa4); pc_patch_free(pa2); return; }
static void test_patch_filter_lazperf_zero_point() { PCPOINT *pt; int i; int npts = 5; PCPOINTLIST *pl; PCPATCH_LAZPERF *pal; PCPATCH *pa; // build a list of points pl = pc_pointlist_make(npts); for ( i = 0; i < npts; i++ ) { pt = pc_point_make(simpleschema); pc_point_set_double_by_name(pt, "x", i*2.0); pc_point_set_double_by_name(pt, "y", i*1.9); pc_point_set_double_by_name(pt, "Z", i*0.34); pc_point_set_double_by_name(pt, "intensity", 10); pc_pointlist_add_point(pl, pt); } // build patch lazperf pal = pc_patch_lazperf_from_pointlist(pl); // filter with a resulting patch of 0 point(s) pa = pc_patch_filter((PCPATCH*) pal, 0, PC_BETWEEN, 0.0, 0.0); CU_ASSERT_EQUAL(pa->npoints, 0); pc_patch_free((PCPATCH*) pal); pc_patch_free((PCPATCH*) pa); pc_pointlist_free(pl); }
PCPATCH * pc_patch_filter_equal_by_name(const PCPATCH *pa, const char *name, double val) { /* Error out if we can't find the name */ PCDIMENSION *d = pc_schema_get_dimension_by_name(pa->schema, name); if ( ! d ) return NULL; return pc_patch_filter(pa, d->position, PC_EQUAL, val, val); }
PCPATCH * pc_patch_filter_between_by_name(const PCPATCH *pa, const char *name, double val1, double val2) { /* Ensure val1 < val2 always */ if ( val1 > val2 ) { double tmp = val1; val1 = val2; val2 = tmp; } /* Error out if we can't find the name */ PCDIMENSION *d = pc_schema_get_dimension_by_name(pa->schema, name); if ( ! d ) return NULL; return pc_patch_filter(pa, d->position, PC_BETWEEN, val1, val2); }