#include #include "blitter.h" #include "cutest/CuTest.h" struct BlitAreaDetails blitAreaDetails; void TMarquee_ZeroOnWordEdges(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 207, 7, 0, 8 ); // no shift CuAssertIntEquals(tc, 0, blitGenericData.shift); // only need 13 words CuAssertIntEquals(tc, 26, blitGenericData.width); // right side has no shift so it will be treated as ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 0, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0xffff, blitGenericData.lastWordMask); } void TMarquee_ZeroOnePixelOver(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 208, 7, 0, 8 ); // no shift CuAssertIntEquals(tc, 0, blitGenericData.shift); // we ned 14 words because of an extra pixel CuAssertIntEquals(tc, 28, blitGenericData.width); // right side has no shift so it will be treated as ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 0, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x8000, blitGenericData.lastWordMask); } void TMarquee_ZeroOnePixelUnder(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 206, 7, 0, 8 ); // no shift CuAssertIntEquals(tc, 0, blitGenericData.shift); // 13 words CuAssertIntEquals(tc, 26, blitGenericData.width); // right side has no shift so it will be treated as ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 0, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0xfffe, blitGenericData.lastWordMask); } void TMarquee_LeftOneOnePixelUnder(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 1, 0, 207, 7, 0, 8 ); // a left shift of 1 on the right side CuAssertIntEquals(tc, -1, blitGenericData.shift); // 13 words CuAssertIntEquals(tc, 26, blitGenericData.width); // this is descending now CuAssertIntEquals(tc, 24, blitGenericData.wordSource); CuAssertIntEquals(tc, 24, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x7fff, blitGenericData.lastWordMask); } void TMarquee_MoveRightOnePixel(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 207, 7, 1, 8 ); // a right shift of 1 on the right side CuAssertIntEquals(tc, 1, blitGenericData.shift); // 14 words CuAssertIntEquals(tc, 28, blitGenericData.width); // ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 0, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x0000, blitGenericData.lastWordMask); } void TMarquee_MoveRight16Px(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 207, 7, 16, 8 ); // no shift CuAssertIntEquals(tc, 0, blitGenericData.shift); // 13 words CuAssertIntEquals(tc, 26, blitGenericData.width); // ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 2, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0xffff, blitGenericData.lastWordMask); } void TMarquee_MoveRight8Px(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 0, 0, 207, 7, 8, 8 ); // shift 8 CuAssertIntEquals(tc, 8, blitGenericData.shift); // 14 words CuAssertIntEquals(tc, 28, blitGenericData.width); // ascending CuAssertIntEquals(tc, 0, blitGenericData.wordSource); CuAssertIntEquals(tc, 0, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xffff, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x0000, blitGenericData.lastWordMask); } void TMarquee_ClipLeft10Px(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 40, 0, 112, 7, 0, 8 ); CuAssertIntEquals(tc, -2, blitGenericData.shift); // 10 words CuAssertIntEquals(tc, 14, blitGenericData.width); // descending CuAssertIntEquals(tc, 12, blitGenericData.wordSource); CuAssertIntEquals(tc, 12, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0x8000, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x3fff, blitGenericData.lastWordMask); } void TMarquee_ClipLeft20Px(CuTest *tc) { struct BlitGenericData blitGenericData; blitAreaDetails.drawAreaWidth = 320; blitAreaDetails.target = 0; blit_buildGenericBlitData( &blitAreaDetails, &blitGenericData, 20, 0, 99, 7, 0, 8 ); // shift -4 CuAssertIntEquals(tc, -4, blitGenericData.shift); // 10 words + shift CuAssertIntEquals(tc, 10, blitGenericData.width); // descending CuAssertIntEquals(tc, 12, blitGenericData.wordSource); CuAssertIntEquals(tc, 8, blitGenericData.wordTarget); CuAssertIntEquals(tc, 0xf000, blitGenericData.firstWordMask); CuAssertIntEquals(tc, 0x0fff, blitGenericData.lastWordMask); } CuSuite *BlitterSuite() { CuSuite *suite = CuSuiteNew(); /* SUITE_ADD_TEST(suite, TMarquee_ZeroOnWordEdges); SUITE_ADD_TEST(suite, TMarquee_ZeroOnePixelOver); SUITE_ADD_TEST(suite, TMarquee_ZeroOnePixelUnder); SUITE_ADD_TEST(suite, TMarquee_LeftOneOnePixelUnder); SUITE_ADD_TEST(suite, TMarquee_MoveRightOnePixel); SUITE_ADD_TEST(suite, TMarquee_MoveRight16Px); SUITE_ADD_TEST(suite, TMarquee_MoveRight8Px); SUITE_ADD_TEST(suite, TMarquee_ClipLeft20Px); */ SUITE_ADD_TEST(suite, TMarquee_ClipLeft10Px); return suite; } int main(void) { CuString *output = CuStringNew(); CuSuite *suite = CuSuiteNew(); CuSuiteAddSuite(suite, BlitterSuite()); CuSuiteRun(suite); CuSuiteSummary(suite, output); CuSuiteDetails(suite, output); printf("%s\n", output->buffer); return 0; }