rem: const translation_format *pExpectedOuts, uint32 nExpectedOuts)
add: const translation_format *pExpectedOuts, uint32 nExpectedOuts, int32 expectedVer)
context: TestBTranslator(BTestCase *ptest, BTranslator *ptran, 	const translation_format *pExpectedIns, uint32 nExpectedIns,	const translation_format *pExpectedOuts, uint32 nExpectedOuts){	const uint32 knmatches = 50;	uint8 matches[knmatches];	CPPUNIT_ASSERT(nExpectedIns <= knmatches && nExpectedOuts <= knmatches);		// The translator should only have one reference	ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->ReferenceCount() == 1);		// Make sure Acquire returns a BTranslator even though its	// already been Acquired once	ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->Acquire() == ptran);		// Acquired twice, refcount should be 2	ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->ReferenceCount() == 2);		// Release should return ptran because it is still acquired	ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->Release() == ptran);		ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->ReferenceCount() == 1);		ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->Acquire() == ptran);		ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->ReferenceCount() == 2);		ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->Release() == ptran);		ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->ReferenceCount() == 1);		// A name would be nice	ptest->NextSubTest();	const char *tranname = ptran->TranslatorName();	CPPUNIT_ASSERT(tranname);	printf(" {%s} ", tranname);		// More info would be nice	ptest->NextSubTest();	const char *traninfo = ptran->TranslatorInfo();	CPPUNIT_ASSERT(traninfo);	printf(" {%s} ", traninfo);		// What version are you?	// (when ver == 100, that means that version is 1.00)	ptest->NextSubTest();	int32 ver = ptran->TranslatorVersion();	CPPUNIT_ASSERT((ver / 100) > 0);	printf(" {%d} ", (int) ver);		// Input formats?	ptest->NextSubTest();	{		printf("input:");				int32 incount = 0;		const translation_format *pins = ptran->InputFormats(&incount);		CPPUNIT_ASSERT(incount == nExpectedIns);		CPPUNIT_ASSERT(pins);				memset(matches, 0, sizeof(uint8) * nExpectedIns);		for (int32 i = 0; i < incount; i++) {			bool bmatch = false;			for (int32 k = 0; bmatch == false && k < nExpectedIns; k++) {				bmatch = CompareTranslationFormat(pins + i, pExpectedIns + k);				if (bmatch)					matches[k] = 1;			}							CPPUNIT_ASSERT(bmatch);		}				// make sure that each expected input format was matched		for (uint32 i = 0; i < nExpectedIns; i++)			CPPUNIT_ASSERT(matches[i]);	}		// Output formats?	ptest->NextSubTest();	{		printf("output:");				int32 outcount = 0;		const translation_format *pouts = ptran->OutputFormats(&outcount);		CPPUNIT_ASSERT(outcount == nExpectedOuts);		CPPUNIT_ASSERT(pouts);				memset(matches, 0, sizeof(uint8) * nExpectedOuts);		for (int32 i = 0; i < outcount; i++) {			bool bmatch = false;			for (int32 k = 0; bmatch == false && k < nExpectedOuts; k++) {				bmatch = CompareTranslationFormat(pouts + i, pExpectedOuts + k);				if (bmatch)					matches[k] = 1;			}							CPPUNIT_ASSERT(bmatch);		}				// make sure that each expected input format was matched		for (uint32 i = 0; i < nExpectedOuts; i++)			CPPUNIT_ASSERT(matches[i]);	}		// Release should return NULL because Release has been called	// as many times as it has been acquired	ptest->NextSubTest();	CPPUNIT_ASSERT(ptran->Release() == NULL);	ptran = NULL;}