aboutsummaryrefslogtreecommitdiffstats
path: root/lv2/lv2plug.in/ns/ext/atom/atom-test.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-03-02 00:03:53 +0000
committerDavid Robillard <d@drobilla.net>2012-03-02 00:03:53 +0000
commit6a848b53ef158648a4dc25274afeb668c530abd9 (patch)
treeac346e53c87f379a1e6ca082b0963b6394b7498f /lv2/lv2plug.in/ns/ext/atom/atom-test.c
parent88135c7bb27557e214928918ca46ecb86c790a0b (diff)
downloadlv2-6a848b53ef158648a4dc25274afeb668c530abd9.tar.xz
Add atom:childType.
Rename vector fields for consistently with atom:childType. Change vector to have child type and size rather than num_elems, since that would require updating the body every time an element is added which ruins the usual atom construction pattern. Implement incremental/automatic vector building with forge.
Diffstat (limited to 'lv2/lv2plug.in/ns/ext/atom/atom-test.c')
-rw-r--r--lv2/lv2plug.in/ns/ext/atom/atom-test.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/lv2/lv2plug.in/ns/ext/atom/atom-test.c b/lv2/lv2plug.in/ns/ext/atom/atom-test.c
index addad81..c92a370 100644
--- a/lv2/lv2plug.in/ns/ext/atom/atom-test.c
+++ b/lv2/lv2plug.in/ns/ext/atom/atom-test.c
@@ -79,10 +79,11 @@ main()
LV2_URID eg_literal = urid_map(NULL, "http://example.org/literal");
LV2_URID eg_tuple = urid_map(NULL, "http://example.org/tuple");
LV2_URID eg_vector = urid_map(NULL, "http://example.org/vector");
+ LV2_URID eg_vector2 = urid_map(NULL, "http://example.org/vector2");
LV2_URID eg_seq = urid_map(NULL, "http://example.org/seq");
#define BUF_SIZE 1024
-#define NUM_PROPS 14
+#define NUM_PROPS 15
uint8_t buf[BUF_SIZE];
lv2_atom_forge_set_buffer(&forge, buf, BUF_SIZE);
@@ -230,12 +231,26 @@ main()
int32_t elems[] = { 1, 2, 3, 4 };
LV2_Atom_Vector* vector = (LV2_Atom_Vector*)lv2_atom_forge_deref(
&forge, lv2_atom_forge_vector(
- &forge, 4, forge.Int32, sizeof(int32_t), elems));;
+ &forge, sizeof(int32_t), forge.Int32, 4, elems));
void* vec_body = LV2_ATOM_CONTENTS(LV2_Atom_Vector, vector);
if (memcmp(elems, vec_body, sizeof(elems))) {
return test_fail("Corrupt vector\n");
}
+ // eg_vector2 = (Vector<Int32>)1,2,3,4
+ lv2_atom_forge_property_head(&forge, eg_vector2, 0);
+ LV2_Atom_Forge_Frame vec_frame;
+ LV2_Atom_Vector* vector2 = (LV2_Atom_Vector*)lv2_atom_forge_deref(
+ &forge, lv2_atom_forge_vector_head(
+ &forge, &vec_frame, sizeof(int32_t), forge.Int32));
+ for (unsigned i = 0; i < sizeof(elems) / sizeof(int32_t); ++i) {
+ lv2_atom_forge_int32(&forge, elems[i]);
+ }
+ lv2_atom_forge_pop(&forge, &vec_frame);
+ if (!lv2_atom_equals(&vector->atom, &vector2->atom)) {
+ return test_fail("Vector != Vector2\n");
+ }
+
// eg_seq = (Sequence)1, 2
lv2_atom_forge_property_head(&forge, eg_seq, 0);
LV2_Atom_Forge_Frame seq_frame;
@@ -302,6 +317,7 @@ main()
const LV2_Atom* literal;
const LV2_Atom* tuple;
const LV2_Atom* vector;
+ const LV2_Atom* vector2;
const LV2_Atom* seq;
} matches;
@@ -321,6 +337,7 @@ main()
{ eg_literal, &matches.literal },
{ eg_tuple, &matches.tuple },
{ eg_vector, &matches.vector },
+ { eg_vector2, &matches.vector2 },
{ eg_seq, &matches.seq },
LV2_OBJECT_QUERY_END
};
@@ -354,6 +371,8 @@ main()
return test_fail("Bad match tuple\n");
} else if (!lv2_atom_equals((LV2_Atom*)vector, matches.vector)) {
return test_fail("Bad match vector\n");
+ } else if (!lv2_atom_equals((LV2_Atom*)vector, matches.vector2)) {
+ return test_fail("Bad match vector2\n");
} else if (!lv2_atom_equals((LV2_Atom*)seq, matches.seq)) {
return test_fail("Bad match sequence\n");
}
@@ -372,6 +391,7 @@ main()
eg_literal, &matches.literal,
eg_tuple, &matches.tuple,
eg_vector, &matches.vector,
+ eg_vector2, &matches.vector2,
eg_seq, &matches.seq,
0);
}