static void verify(Bean bean)
    {
        assertEquals(bean.name, "test");

        assertNotNull(bean.firstList);
        assertTrue(bean.firstList.size() == 2);
        assertTrue(bean.firstList.get(0) == bean.secondList.get(0));

        assertNotNull(bean.secondItem);
        assertTrue(bean.secondItem == bean.firstItem);

        assertNotNull(bean.firstMap);
        assertTrue(bean.firstMap.size() == 2);

        assertTrue(bean.firstMap.get("share") == bean.secondMap.get("share"));
        assertTrue(bean.firstMap.get("share3") == bean.secondMap.get("share3"));

        assertNotNull(bean.firstHasName);
        assertTrue(bean.firstHasName == bean.secondHashname);

        assertNotNull(bean.firstNamed);
        assertTrue(bean.firstNamed == bean.secondNamed);

        assertNotNull(bean.firstObject);
        assertTrue(bean.firstObject == bean.secondObject);

        assertNotNull(bean.firstStringMap);
        assertTrue(bean.firstStringMap.size() == 2);
        assertTrue(bean.firstStringMap.get("share") == bean.secondStringMap
                .get("share"));
        assertTrue(bean.firstStringMap.get("share6") == bean.secondStringMap
                .get("share6"));

        assertNotNull(bean.firstHasNameMap);
        assertTrue(bean.firstHasNameMap.size() == 2);
        assertTrue(bean.firstHasNameMap.get("share") == bean.secondHasNameMap
                .get("share"));
        assertTrue(bean.firstHasNameMap.get("share7") == bean.secondHasNameMap
                .get("share7"));

        assertNotNull(bean.firstNamedMap);
        assertTrue(bean.firstNamedMap.size() == 2);
        assertTrue(bean.firstNamedMap.get("share") == bean.secondNamedMap
                .get("share"));
        assertTrue(bean.firstNamedMap.get("share8") == bean.secondNamedMap
                .get("share8"));

        assertNotNull(bean.firstIntArray);
        assertTrue(bean.firstIntArray.length == 3);
        assertTrue(bean.firstIntArray == bean.secondIntArray);

        assertNotNull(bean.firstSetMap);
        assertTrue(bean.firstSetMap.size() == 1);

        assertTrue(bean.firstSetMap.values().iterator().next() == bean.secondSetMap
                .values().iterator().next());
        assertTrue(bean.firstSetMap.keySet().iterator().next() == bean.secondSetMap
                .keySet().iterator().next());

        assertNotNull(bean.firstListMap);
        assertTrue(bean.firstListMap.size() == 1);

        List<Order> orderList = bean.firstListMap.keySet().iterator().next();
        assertTrue(orderList.size() == 3);
        assertTrue(orderList.get(0) == Order.ASCENDING);
        assertTrue(orderList.get(1) == Order.DESCENDING);
        assertTrue(orderList.get(2) == Order.ASCENDING);

        assertTrue(orderList == bean.secondListMap.keySet().iterator().next());

        assertTrue(bean.firstListMap.values().iterator().next() == bean.secondListMap
                .values().iterator().next());

        assertNotNull(bean.firstEnumSetMap);
        assertTrue(bean.firstEnumSetMap.size() == 1);

        assertTrue(bean.firstEnumSetMap.values().iterator().next() == bean.secondEnumSetMap
                .values().iterator().next());
        assertTrue(bean.firstEnumSetMap.keySet().iterator().next() == bean.secondEnumSetMap
                .keySet().iterator().next());

        assertNotNull(bean.firstMapList);
        assertTrue(bean.firstMapList.size() == 1);
        assertTrue(bean.firstMapList.get(0) == bean.secondMapList.get(0));

        assertNotNull(bean.firstEnumMapList);
        assertTrue(bean.firstEnumMapList.size() == 1);
        assertTrue(bean.firstEnumMapList.get(0) == bean.secondEnumMapList
                .get(0));

        assertNotNull(bean.firstItemArray);
        assertTrue(bean.firstItemArray.length == 14);

        assertTrue(bean.firstItemArray == bean.secondItemArray);
        assertTrue(bean.firstItemArray == bean.itemArray);

        assertEquals(bean.firstItemArray[0].name, "share");
        assertEquals(bean.firstItemArray[1].name, "share2");
        assertEquals(bean.firstItemArray[2].name, "share3");
        assertEquals(bean.firstItemArray[3].name, "share4");
        assertEquals(bean.firstItemArray[4].name, "share5");
        assertEquals(bean.firstItemArray[5].name, "share6");
        assertEquals(bean.firstItemArray[6].name, "share7");
        assertEquals(bean.firstItemArray[7].name, "share8");
        assertEquals(bean.firstItemArray[8].name, "share9");
        assertEquals(bean.firstItemArray[9].name, "share10");
        assertEquals(bean.firstItemArray[10].name, "share11");
        assertEquals(bean.firstItemArray[11].name, "share12");
        assertEquals(bean.firstItemArray[12].name, "share13");
        assertEquals(bean.firstItemArray[13].name, "share14");

        assertNotNull(bean.itemArray2d);
        assertTrue(bean.itemArray2d.length == 1);
        assertTrue(bean.itemArray2d[0] == bean.firstItemArray);

        assertNotNull(bean.itemArrayWrapper);
        assertTrue(bean.itemArrayWrapper.length == 3);
        assertTrue(bean.itemArrayWrapper[0] == bean.itemArray);
        assertTrue(bean.itemArrayWrapper[1] == bean.itemArray2d);
        assertTrue(bean.itemArrayWrapper[2] == bean.firstItemArray[0]);

        assertNotNull(bean.firstSet);
        assertTrue(bean.firstSet.size() == 1);
        assertTrue(bean.firstSet.iterator().next() == bean.secondSet.iterator()
                .next());

        assertNotNull(bean.identityMap);
        assertTrue(bean.identityMap.size() == 1);
        assertTrue(bean.identityMap.keySet().iterator().next() == bean.identityMap
                .values().iterator().next());

        Item share = bean.firstItemArray[0];
        assertEquals(share.name, "share");
        assertTrue(bean.identityMap.containsKey(share));
        assertTrue(bean.identityMap.get(share) == share);

        assertNotNull(bean.anotherIdentityMap);
        assertTrue(bean.anotherIdentityMap.size() == 2);
        assertEquals(bean.anotherIdentityMap.get(Order.ASCENDING), new Item(
                "share16"));
        assertTrue(bean.anotherIdentityMap.get(Order.DESCENDING) == share);
    }
Test cyclic ser/deser on fields where the type is dynamic.

@author David Yu
@created Oct 20, 2011
protostuff-runtime/src/test/java/io/protostuff/runtime/ObjectSchemaTest.java