cool-bun-demo/blitter_test.c

317 lines
7.0 KiB
C
Raw Permalink Normal View History

2024-05-27 18:58:13 +00:00
#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;
}