public void TestSerializingWithEntityViewStructsAndFactories()
        {
            var init = _entityFactory.BuildEntity <SerializableEntityDescriptorWithViews>(
                0, NamedGroup1.Group, new[] { new Implementor(1) });

            init.Init(new EntityStructSerialized()
            {
                value = 5
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 4
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 3
            });

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            FasterList <byte> bytes      = new FasterList <byte>();
            var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer();
            var simpleSerializationData  = new SimpleSerializationData(bytes);

            generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);

            SimpleEntitiesSubmissionScheduler simpleSubmissionEntityViewScheduler = new SimpleEntitiesSubmissionScheduler();
            var newEnginesRoot = new EnginesRoot(simpleSubmissionEntityViewScheduler);

            _neverDoThisIsJustForTheTest = new TestEngine();

            newEnginesRoot.AddEngine(_neverDoThisIsJustForTheTest);

            simpleSerializationData.Reset();
            generateEntitySerializer = newEnginesRoot.GenerateEntitySerializer();
            DeserializationFactory factory = new DeserializationFactory();

            generateEntitySerializer.RegisterSerializationFactory <SerializableEntityDescriptorWithViews>(factory);

            generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);

            simpleSubmissionEntityViewScheduler.SubmitEntities();

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(0, NamedGroup1.Group).value
                , Is.EqualTo(5));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(_neverDoThisIsJustForTheTest
                        .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1
                        , Is.EqualTo(3));

            newEnginesRoot.Dispose();
        }
        public void TestSerializingWithEntityStructsWithVersioning()
        {
            var init = _entityFactory.BuildEntity <SerializableEntityDescriptorV0>(0, NamedGroup1.Group);

            init.Init(new EntityStructSerialized2()
            {
                value = 4
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 3
            });

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            FasterList <byte> bytes      = new FasterList <byte>();
            var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer();
            var simpleSerializationData  = new SimpleSerializationData(bytes);

            generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group),
                                                     simpleSerializationData, SerializationType.Storage);

            _enginesRoot.Dispose();
            var newEnginesRoot = new EnginesRoot(_simpleSubmissionEntityViewScheduler);

            _neverDoThisIsJustForTheTest = new TestEngine();

            newEnginesRoot.AddEngine(_neverDoThisIsJustForTheTest);

            simpleSerializationData.Reset();
            generateEntitySerializer = newEnginesRoot.GenerateEntitySerializer();

            //needed for the versioning to work
            generateEntitySerializer.RegisterSerializationFactory <SerializableEntityDescriptorV0>(new DefaultVersioningFactory <SerializableEntityDescriptorV1>(newEnginesRoot.GenerateEntityFactory()));

            generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData,
                                                          SerializationType.Storage);

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            Assert.That(_neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value, Is.EqualTo(4));
            Assert.That(_neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1, Is.EqualTo(3));
        }
        public void TestSerializingToByteArrayRemoveGroup()
        {
            var init = _entityFactory.BuildEntity <SerializableEntityDescriptor>(0, NamedGroup1.Group);

            init.Init(new EntityStructSerialized()
            {
                value = 5
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 4
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 3
            });
            init = _entityFactory.BuildEntity <SerializableEntityDescriptor>(1, NamedGroup1.Group);
            init.Init(new EntityStructSerialized()
            {
                value = 4
            });
            init.Init(new EntityStructSerialized2()
            {
                value = 3
            });
            init.Init(new EntityStructPartiallySerialized()
            {
                value1 = 2
            });

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            FasterList <byte> bytes      = new FasterList <byte>();
            var generateEntitySerializer = _enginesRoot.GenerateEntitySerializer();
            var simpleSerializationData  = new SimpleSerializationData(bytes);

            generateEntitySerializer.SerializeEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);
            generateEntitySerializer.SerializeEntity(new EGID(1, NamedGroup1.Group), simpleSerializationData
                                                     , (int)SerializationType.Storage);

            _entityFunctions.RemoveEntitiesFromGroup(NamedGroup1.Group);
            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            simpleSerializationData.Reset();

            generateEntitySerializer.DeserializeNewEntity(new EGID(0, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);
            generateEntitySerializer.DeserializeNewEntity(new EGID(1, NamedGroup1.Group), simpleSerializationData
                                                          , (int)SerializationType.Storage);

            _simpleSubmissionEntityViewScheduler.SubmitEntities();

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(0, NamedGroup1.Group).value
                , Is.EqualTo(5));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(0, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(
                _neverDoThisIsJustForTheTest
                .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(0, NamedGroup1.Group).value1
                , Is.EqualTo(3));

            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized>(1, NamedGroup1.Group).value
                , Is.EqualTo(4));
            Assert.That(
                _neverDoThisIsJustForTheTest.entitiesDB.QueryEntity <EntityStructSerialized2>(1, NamedGroup1.Group).value
                , Is.EqualTo(3));
            Assert.That(
                _neverDoThisIsJustForTheTest
                .entitiesDB.QueryEntity <EntityStructPartiallySerialized>(1, NamedGroup1.Group).value1
                , Is.EqualTo(2));
        }