public function testImmutableMerge()
{
$std1 = new \stdClass();
$std1->id = 1;
$std2 = new \stdClass();
$std2->id = 2;
$std3 = new \stdClass();
$std3->id = 3;
$std4 = new Dummy();
$object1 = new CompleteObject(new SimpleObject('foo', $std1));
$object2 = new CompleteObject(new SimpleObject('bar', $std2));
$object3 = new CompleteObject(new SimpleObject('bar', $std3));
$object4 = new CompleteObject(new SimpleObject('baz', $std4));
$bag1 = (new ObjectBag())->with($object1)->with($object2);
$bag2 = (new ObjectBag())->with($object3)->with($object4);
$bag = $bag1->mergeWith($bag2);
$this->assertInstanceOf(ObjectBag::class, $bag);
$this->assertSameObjects(['foo' => $object1, 'bar' => $object2], $bag1);
$this->assertSameObjects(['bar' => $object3, 'baz' => $object4], $bag2);
$this->assertSameObjects(['foo' => $object1, 'bar' => $object3, 'baz' => $object4], $bag);
}