#include "tileeditor/DirtyStates.h"
#include "unittest/TestSuite.h"
#include <limits.h>

static void testImageCollectionDirtyState(void) {
	ImageCollection_dirtyState dirtyState1 = initImageCollectionDirtyState();
	ImageCollection_dirtyState dirtyState2 = initImageCollectionDirtyState();
	TestCase_assertUIntEqual(dirtyState1.properties, 0);
	TestCase_assertUIntEqual(dirtyState1.imageList, 0);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 0);
	TestCase_assertUIntEqual(dirtyState1.imageName, 0);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 0);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 0);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 0);
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_ALL));
	
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_ALL);
	TestCase_assertUIntEqual(dirtyState1.properties, 1);
	TestCase_assertUIntEqual(dirtyState1.imageList, 1);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.imageName, 1);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_ALL));
	
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_PROPERTIES));
	dirtyState2.properties = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_PROPERTIES));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_LIST));
	dirtyState2.imageList = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_LIST));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PROPERTIES));
	dirtyState2.imageProperties = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PROPERTIES));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_NAME));
	dirtyState2.imageName = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_NAME));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_DIMENSIONS));
	dirtyState2.imageDimensions = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_DIMENSIONS));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_0));
	dirtyState2.imagePixels0 = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_0));
	TestCase_assertBoolFalse(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_1));
	dirtyState2.imagePixels1 = 1;
	TestCase_assertBoolTrue(isImageCollectionDirtyStateEqual(dirtyState1, dirtyState2, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_1));
	
	invalidateImageCollectionDirtyState(&dirtyState2);
	TestCase_assertUIntEqual(dirtyState2.properties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imageList, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imageProperties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imageName, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imageDimensions, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imagePixels0, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.imagePixels1, UINT_MAX);
	
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 1);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.imageName, 1);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_LIST);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.imageName, 1);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageName, 1);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_NAME);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageName, 2);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_DIMENSIONS);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageName, 2);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 2);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 1);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_0);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageName, 2);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 2);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 2);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 1);
	advanceImageCollectionDirtyState(&dirtyState1, IMAGE_COLLECTION_DIRTY_IMAGE_PIXELS_1);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageList, 2);
	TestCase_assertUIntEqual(dirtyState1.imageProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.imageName, 2);
	TestCase_assertUIntEqual(dirtyState1.imageDimensions, 2);
	TestCase_assertUIntEqual(dirtyState1.imagePixels0, 2);
	TestCase_assertUIntEqual(dirtyState1.imagePixels1, 2);
}

static void testTilesetDirtyState(void) {
	TilesetEditData_dirtyState dirtyState1 = initTilesetDirtyState();
	TilesetEditData_dirtyState dirtyState2 = initTilesetDirtyState();
	TestCase_assertUIntEqual(dirtyState1.properties, 0);
	TestCase_assertUIntEqual(dirtyState1.name, 0);
	TestCase_assertUIntEqual(dirtyState1.tileList, 0);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 0);
	TestCase_assertUIntEqual(dirtyState1.tileName, 0);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 0);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 0);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 0);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 0);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 0);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 0);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 0);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 0);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 0);
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ALL));
	
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_ALL);
	TestCase_assertUIntEqual(dirtyState1.properties, 1);
	TestCase_assertUIntEqual(dirtyState1.name, 1);
	TestCase_assertUIntEqual(dirtyState1.tileList, 1);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.tileName, 1);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ALL));
	
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_PROPERTIES));
	dirtyState2.properties = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_PROPERTIES));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_NAME));
	dirtyState2.name = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_NAME));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_LIST));
	dirtyState2.tileList = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_LIST));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_PROPERTIES));
	dirtyState2.tileProperties = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_PROPERTIES));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_NAME));
	dirtyState2.tileName = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_NAME));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_METADATA));
	dirtyState2.tileMetadata = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_TILE_METADATA));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_LIST));
	dirtyState2.schemaList = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_LIST));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_PROPERTIES));
	dirtyState2.schemaProperties = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_PROPERTIES));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_NAME));
	dirtyState2.schemaName = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_NAME));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_DATA));
	dirtyState2.schemaData = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_SCHEMA_DATA));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_LIST));
	dirtyState2.enumerationList = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_LIST));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_PROPERTIES));
	dirtyState2.enumerationProperties = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_PROPERTIES));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_NAME));
	dirtyState2.enumerationName = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_NAME));
	TestCase_assertBoolFalse(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_VALUES));
	dirtyState2.enumerationValues = 1;
	TestCase_assertBoolTrue(isTilesetDirtyStateEqual(dirtyState1, dirtyState2, TILESET_DIRTY_ENUMERATION_VALUES));
	
	invalidateTilesetDirtyState(&dirtyState2);
	TestCase_assertUIntEqual(dirtyState2.properties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.name, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.tileList, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.tileProperties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.tileName, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.tileMetadata, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.schemaList, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.schemaProperties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.schemaName, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.schemaData, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.enumerationList, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.enumerationProperties, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.enumerationName, UINT_MAX);
	TestCase_assertUIntEqual(dirtyState2.enumerationValues, UINT_MAX);
	
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 1);
	TestCase_assertUIntEqual(dirtyState1.tileList, 1);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.tileName, 1);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_NAME);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 1);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.tileName, 1);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_TILE_LIST);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.tileName, 1);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_TILE_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 1);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_TILE_NAME);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_TILE_METADATA);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_SCHEMA_LIST);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_SCHEMA_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 1);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_SCHEMA_NAME);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_SCHEMA_DATA);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_ENUMERATION_LIST);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_ENUMERATION_PROPERTIES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 1);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_ENUMERATION_NAME);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 1);
	advanceTilesetDirtyState(&dirtyState1, TILESET_DIRTY_ENUMERATION_VALUES);
	TestCase_assertUIntEqual(dirtyState1.properties, 2);
	TestCase_assertUIntEqual(dirtyState1.name, 2);
	TestCase_assertUIntEqual(dirtyState1.tileList, 2);
	TestCase_assertUIntEqual(dirtyState1.tileProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.tileName, 2);
	TestCase_assertUIntEqual(dirtyState1.tileMetadata, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaList, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaName, 2);
	TestCase_assertUIntEqual(dirtyState1.schemaData, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationList, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationProperties, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationName, 2);
	TestCase_assertUIntEqual(dirtyState1.enumerationValues, 2);
}

TEST_SUITE(DirtyStatesTest,
           testImageCollectionDirtyState,
           testTilesetDirtyState)
