diff options
| author | sanine <sanine.not@pm.me> | 2023-02-04 00:12:43 -0600 | 
|---|---|---|
| committer | sanine <sanine.not@pm.me> | 2023-02-04 00:12:43 -0600 | 
| commit | 6292c2bce712dcca01ded960dc5f93528da2b9ce (patch) | |
| tree | 739ea80df6be591a1105d670a528effe698ff9c6 /src | |
| parent | b183f50a84efc495b322370976b22bad486800f3 (diff) | |
implement kai_read_float_array
Diffstat (limited to 'src')
| -rw-r--r-- | src/geometry/geometry.c | 20 | ||||
| -rw-r--r-- | src/geometry/geometry.test.c | 28 | 
2 files changed, 45 insertions, 3 deletions
| diff --git a/src/geometry/geometry.c b/src/geometry/geometry.c index 322ada0..fd42735 100644 --- a/src/geometry/geometry.c +++ b/src/geometry/geometry.c @@ -13,11 +13,25 @@ int kai_read_float_array(struct ka_float_array_t *dest, struct kai_tag_t *src)  		return -1;  	} -	char *count_str = kai_tag_get_attr(src, "count"); -	if (count_str == NULL) { -		/* missing required count attribute! */ +	int flag; +	dest->count = kai_tag_attr_to_long(src, "count", 0, &flag); +	if (flag != 0) { +		/* count not present */  		return -1;  	} +	char *id = kai_tag_get_attr(src, "id"); +	if (id != NULL) +		dest->id = strdup(id); +	else +		dest->id = NULL; + +	dest->digits = kai_tag_attr_to_long(src, "digits", 6, NULL); +	dest->magnitude = kai_tag_attr_to_long(src, "magnitude", 38, NULL); + +	/* allocate & fill buffer */ +	dest->buf = malloc(dest->count * sizeof(ka_real_t)); +	kai_text_to_reals(dest->buf, src->content, dest->count); +  	return 0;  } diff --git a/src/geometry/geometry.test.c b/src/geometry/geometry.test.c index d433066..56673a4 100644 --- a/src/geometry/geometry.test.c +++ b/src/geometry/geometry.test.c @@ -40,5 +40,33 @@ LILY_TEST("fail to read float_array without count attribute")  #include LILY_PUSH_TEST() +LILY_TEST("read normal float_array") +{ +	struct kai_tag_t *t = kai_parse_string( +		"<float_array count=\"3\" id=\"arr\">" +		"	-0.5 0.0 0.5" +		"</float_array>" +	); + +	struct ka_float_array_t arr; +	int result = kai_read_float_array(&arr, t); +	REQUIRE_EQ(result, 0, "%d"); +	kai_tag_destroy(t); + +	REQUIRE_EQ(arr.count, 3, "%d"); +	CHECK_EQS(arr.id, "arr"); +	CHECK_EQ(arr.digits, 6, "%d"); +	CHECK_EQ(arr.magnitude, 38, "%d"); + +	CHECK_EQF(arr.buf[0], -0.5, "%f"); +	CHECK_EQF(arr.buf[1],  0.0, "%f"); +	CHECK_EQF(arr.buf[2],  0.5, "%f"); + +	free(arr.id); +	free(arr.buf); +} +#include LILY_PUSH_TEST() + +  #define LILY_FILE_END  #include LILY_REGISTER_TESTS() | 
