protected void CheckStructureData(ProgramDB program, long address, String expectedName,
			String[] expectedFieldNames, boolean lastFieldIsFlexArray, int expectedDtLength,
			boolean isTypeDefOfStructure) {
		Listing listing = program.getListing();
		Data data = listing.getDataAt(addr(program, address));
		DataType dataType = data.getDataType();
		String name = dataType.getName();
		assertEquals(expectedName, name);
		assertEquals(expectedDtLength, dataType.getLength());

		DataType baseDataType = dataType;
		if (isTypeDefOfStructure) {
			assertTrue("DataType " + name + " wasn't a TypeDef.", dataType instanceof TypeDef);
			baseDataType = ((TypeDef) dataType).getBaseDataType();
		}
		assertTrue("DataType " + name + "'s base data type wasn't a Structure.",
			baseDataType instanceof Structure);
		Structure structure = (Structure) baseDataType;
		assertEquals("Mismatch in expected structure component count: " + name,
			expectedFieldNames.length, structure.getNumComponents());
		DataTypeComponent[] components = structure.getComponents();
		boolean hasTrailingFlexArray = false;
		for (int i = 0; i < components.length; i++) {
			assertEquals(
				"Expected component " + i + " to be named " + expectedFieldNames[i] + " but was " +
					components[i].getFieldName(),
				expectedFieldNames[i], components[i].getFieldName());
			DataType dt = components[i].getDataType();
			hasTrailingFlexArray = (dt instanceof Array) && dt.isZeroLength();
		}

		if (lastFieldIsFlexArray) {
			assertTrue("Structure does not end with flexible array", hasTrailingFlexArray);
		}
		else {
			assertFalse("Structure contains unexpected flexible array component",
				hasTrailingFlexArray);
		}
	}
Creates a 64 bit program builder that can be used for testing.
@return the program builder for a 64 bit non-VisualStudio x86 PE program.
@throws Exception if it fails to create the ProgramBuilder
Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/cmd/data/AbstractCreateDataTypeModelTest.java