void TestChannelsAccessorTypeConvert(void) { CChannels* pcChannels; CChannelsAccessor* pcAccessor; CChannelsAccessorCreator cCreator; float* pfData; float afData[3]; pcChannels = UMalloc(CChannels); pcChannels->Init(); pcChannels->BeginChange(); pcChannels->SetSize(2); pcChannels->AddChannel(CHANNEL_NAME_JACK, PT_ushort); pcChannels->AddChannel(CHANNEL_NAME_BOB, PT_uint); pcChannels->AddChannel(CHANNEL_NAME_ALICE, PT_ushort); pcChannels->EndChange(); pcChannels->Clear(); cCreator.Init(pcChannels); cCreator.AddAccess(CHANNEL_NAME_JACK, PT_float); cCreator.AddAccess(CHANNEL_NAME_ALICE, PT_float); pcAccessor = cCreator.CreateAndKill(); AssertString("CChannelsAccessorTypeConvert", pcAccessor->ClassName()); afData[0] = 1.0f; afData[1] = 0.34f; pcAccessor->Set(1, afData); AssertShortHex((short)0xffff, *(unsigned short*)RemapSinglePointer(pcChannels->GetData(), 8 + 0)); AssertShortHex(0x5709, *(unsigned short*)RemapSinglePointer(pcChannels->GetData(), 8 + 6)); pfData = (float*)pcAccessor->Get(1); AssertFloat(1.0f, pfData[0], 2); AssertFloat(0.34f, pfData[1], 2); pcAccessor->Kill(); cCreator.Init(pcChannels); cCreator.AddAccess(CHANNEL_NAME_BOB, PT_float); pcAccessor = cCreator.CreateAndKill(); AssertString("CChannelsAccessorTypeConvert", pcAccessor->ClassName()); afData[0] = 0.8f; pcAccessor->Set(1, afData); AssertIntHex(0xcccccd00, *(int*)RemapSinglePointer(pcChannels->GetData(), 8 + 2)); pcAccessor->Kill(); cCreator.Init(pcChannels); cCreator.AddAccess(CHANNEL_NAME_ALICE, PT_float); cCreator.AddAccess(CHANNEL_NAME_BOB, PT_float); pcAccessor = cCreator.CreateAndKill(); AssertString("CChannelsAccessorTypeConvert", pcAccessor->ClassName()); pfData = (float*)pcAccessor->Get(1); AssertFloat(0.34f, pfData[0], 2); AssertFloat(0.80f, pfData[1], 2); pcAccessor->Kill(); }
void TestImageColourMultiAccessor(void) { CImageColourNormal cNormal; CImageColourOpacity cAlpha; CImageColourCombo2 cColour; CChannels* pcChannels; CImageAccessor* pcAccessor; CImage cImage; SImageColour sDest; BOOL bResult; cNormal.Init(0.7f, -0.6f, -0.5f); cAlpha.Init(0.333f); cColour.Init(&cNormal, &cAlpha); cImage.Init(); cImage.BeginChange(); cImage.AddChannel(IMAGE_DIFFUSE_GREEN, PT_uchar); cImage.AddChannel(IMAGE_NORMAL_Y, PT_float); cImage.AddChannel(IMAGE_DIFFUSE_BLUE, PT_uchar); cImage.AddChannel(IMAGE_OPACITY, PT_ushort); cImage.AddChannel(IMAGE_DIFFUSE_RED, PT_uchar); cImage.AddChannel(IMAGE_MASK, PT_int); cImage.AddChannel(IMAGE_NORMAL_Z, PT_float); cImage.AddChannel(IMAGE_NORMAL_X, PT_float); cImage.SetSize(1, 2); cImage.EndChange(); cImage.Clear(); pcAccessor = CImageAccessorCreator::Create(&cImage, IMAGE_NORMAL_X, IMAGE_NORMAL_Y, IMAGE_NORMAL_Z, IMAGE_OPACITY, CHANNEL_ZERO); sDest.Full(); bResult = pcAccessor->MakeColour(&sDest, &cColour); AssertBool(TRUE, bResult); AssertFloat(0.7f, *((float*)&((sDest).c)[0x0]), 3); AssertFloat(-0.6f, *((float*)&((sDest).c)[0x4]), 3); AssertFloat(-0.5f, *((float*)&((sDest).c)[0x8]), 3); AssertShortHex(0x553f, *((unsigned short*)&((sDest).c)[0xc])); pcAccessor->Set(0, 1, &sDest); pcAccessor->Kill(); pcChannels = &cImage.mcChannels; AssertFloat(-0.6f, *(float*)&(pcChannels->GetData()[22]), 3); AssertFloat( 0.7f, *(float*)&(pcChannels->GetData()[38]), 3); AssertFloat(-0.5f, *(float*)&(pcChannels->GetData()[34]), 3); AssertShortHex(0x553f, *(unsigned short*)&(pcChannels->GetData()[27])); }
void TestSingleChannelAccessor(void) { BeginTests(); ClassStorageInit(); TypeConverterInit(); UnknownsInit(); CChannels cChannels; unsigned char cData[9] = "ti@YA,\n#"; CSingleChannelAccessor cSingle; char c; unsigned s; cChannels.Init(); cChannels.BeginChange(); cChannels.SetData(cData); cChannels.AddChannel(16, 15, 14, 13, PT_nybble); cChannels.AddChannel(12, 11, PT_uchar); cChannels.AddChannel(10, PT_ushort); cChannels.AddChannel(9, 8, 7, 6, PT_bit); cChannels.AddChannel(5, 4, PT_crumb); cChannels.AddChannel(3, PT_uchar); cChannels.SetSize(1); cChannels.EndChange(); cSingle.Init(&cChannels); AssertFloat(0.27f, cSingle.GetConvertToFloat(16), 2); AssertFloat(0.47f, cSingle.GetConvertToFloat(15), 2); AssertFloat(0.60f, cSingle.GetConvertToFloat(14), 2); AssertFloat(0.40f, cSingle.GetConvertToFloat(13), 2); cSingle.GetNative(16, &c); AssertChar(4, c); cSingle.GetNative(15, &c); AssertChar(7, c); cSingle.GetNative(14, &c); AssertChar(9, c); cSingle.GetNative(13, &c); AssertChar(6, c); AssertFloat(0.25f, cSingle.GetConvertToFloat(12), 2); AssertFloat(0.35f, cSingle.GetConvertToFloat(11), 2); cSingle.GetNative(12, &c); AssertChar('@', c); cSingle.GetNative(11, &c); AssertChar('Y', c); cSingle.GetNative(10, &s); AssertShortHex(0x2c41, s); AssertFloat(0.0f, cSingle.GetConvertToFloat(9), 1); AssertFloat(1.0f, cSingle.GetConvertToFloat(8), 1); AssertFloat(0.0f, cSingle.GetConvertToFloat(7), 1); AssertFloat(1.0f, cSingle.GetConvertToFloat(6), 1); AssertFloat(0.14f, cSingle.GetConvertToFloat(3), 2); cSingle.GetNative(3, &c); AssertChar('#', c); cChannels.Kill(); UnknownsKill(); TypeConverterKill(); ClassStorageKill(); TestStatistics(); }
void TestChannelsAccessorAccessBitty(void) { CChannels* pcChannels; CChannelsAccessor* pcAccessor; CChannelsAccessorCreator cCreator; unsigned char* pucData; unsigned char aucData[2]; pcChannels = UMalloc(CChannels); pcChannels->Init(); pcChannels->BeginChange(); pcChannels->SetSize(1); pcChannels->AddChannel(CHANNEL_NAME_JACK, PT_ushort); pcChannels->AddChannel(CHANNEL_NAME_BOB, PT_ushort); pcChannels->AddChannel(CHANNEL_NAME_ALICE, PT_ushort); pcChannels->EndChange(); pcChannels->Clear(); cCreator.Init(pcChannels); cCreator.AddAccess(CHANNEL_NAME_JACK, PT_sixbits); cCreator.AddAccess(CHANNEL_NAME_BOB, PT_sixbits); cCreator.AddAccess(CHANNEL_NAME_ALICE, PT_nybble); pcAccessor = cCreator.CreateAndKill(); AssertString("CChannelsAccessorAccessBitty", pcAccessor->ClassName()); //XX10110010100011 aucData[0] = 0xa3; aucData[1] = 0x2c; pcAccessor->Set(0, aucData); AssertShortHex((unsigned short)0x8e38, *(unsigned short*)RemapSinglePointer(pcChannels->GetData(), 0 + 0)); AssertShortHex((unsigned short)0xcb2b, *(unsigned short*)RemapSinglePointer(pcChannels->GetData(), 0 + 2)); AssertShortHex((unsigned short)0x2222, *(unsigned short*)RemapSinglePointer(pcChannels->GetData(), 0 + 4)); pucData = (unsigned char*)pcAccessor->Get(0); AssertShortHex((unsigned short)0x2ca3, *(unsigned short*)pucData); pcAccessor->Kill(); }