317 lines
7.0 KiB
C
317 lines
7.0 KiB
C
|
#include <stdio.h>
|
||
|
|
||
|
#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;
|
||
|
}
|