+ }
+
+ list<PositionImage> all;
+ all.push_back (PositionImage (A, Position<int> (0, 0)));
+ PositionImage merged = merge (all);
+
+ BOOST_CHECK (merged.position == Position<int> (0, 0));
+ BOOST_CHECK_EQUAL (memcmp (merged.image->data()[0], A->data()[0], stride * 48), 0);
+}
+
+/** Test merge (list<PositionImage>) with two images */
+BOOST_AUTO_TEST_CASE (merge_test2)
+{
+ shared_ptr<Image> A = make_shared<Image> (AV_PIX_FMT_RGBA, dcp::Size (48, 1), false);
+ A->make_transparent ();
+ uint8_t* a = A->data()[0];
+ for (int x = 0; x < 16; ++x) {
+ /* red */
+ a[x * 4] = 255;
+ /* opaque */
+ a[x * 4 + 3] = 255;
+ }
+
+ shared_ptr<Image> B = make_shared<Image> (AV_PIX_FMT_RGBA, dcp::Size (48, 1), false);
+ B->make_transparent ();
+ uint8_t* b = B->data()[0];
+ for (int x = 0; x < 16; ++x) {
+ /* blue */
+ b[(x + 32) * 4 + 2] = 255;
+ /* opaque */
+ b[(x + 32) * 4 + 3] = 255;
+ }
+
+ list<PositionImage> all;
+ all.push_back (PositionImage (A, Position<int> (0, 0)));
+ all.push_back (PositionImage (B, Position<int> (0, 0)));
+ PositionImage merged = merge (all);
+
+ BOOST_CHECK (merged.position == Position<int> (0, 0));
+
+ uint8_t* m = merged.image->data()[0];
+
+ for (int x = 0; x < 16; ++x) {
+ BOOST_CHECK_EQUAL (m[x * 4], 255);
+ BOOST_CHECK_EQUAL (m[x * 4 + 3], 255);
+ BOOST_CHECK_EQUAL (m[(x + 16) * 4 + 3], 0);
+ BOOST_CHECK_EQUAL (m[(x + 32) * 4 + 2], 255);
+ BOOST_CHECK_EQUAL (m[(x + 32) * 4 + 3], 255);