108 lines
2.8 KiB
C#
108 lines
2.8 KiB
C#
using Chip8.Core;
|
|
using Xunit;
|
|
|
|
namespace Chip8.Tests;
|
|
|
|
public class VideoTests
|
|
{
|
|
static Video withPixel(int x, int y, int planeMask = 1)
|
|
{
|
|
var video = new Video();
|
|
var sprite = new byte[] { 0x80 };
|
|
video.drawSprite(sprite, 0, x, y, 1, planeMask, false);
|
|
return video;
|
|
}
|
|
|
|
[Fact]
|
|
public void scrollDownMovesRowsDown()
|
|
{
|
|
var video = withPixel(5, 2);
|
|
video.scrollDown(3, 1);
|
|
Assert.False(video.pixel(0, 5, 2));
|
|
Assert.True(video.pixel(0, 5, 5));
|
|
}
|
|
|
|
[Fact]
|
|
public void scrollUpMovesRowsUp()
|
|
{
|
|
var video = withPixel(5, 10);
|
|
video.scrollUp(3, 1);
|
|
Assert.False(video.pixel(0, 5, 10));
|
|
Assert.True(video.pixel(0, 5, 7));
|
|
}
|
|
|
|
[Fact]
|
|
public void scrollRightMovesColumnsRight()
|
|
{
|
|
var video = withPixel(5, 2);
|
|
video.scrollRight(4, 1);
|
|
Assert.False(video.pixel(0, 5, 2));
|
|
Assert.True(video.pixel(0, 9, 2));
|
|
}
|
|
|
|
[Fact]
|
|
public void scrollLeftMovesColumnsLeft()
|
|
{
|
|
var video = withPixel(9, 2);
|
|
video.scrollLeft(4, 1);
|
|
Assert.False(video.pixel(0, 9, 2));
|
|
Assert.True(video.pixel(0, 5, 2));
|
|
}
|
|
|
|
[Fact]
|
|
public void scrollRespectsPlaneMask()
|
|
{
|
|
var video = new Video();
|
|
var sprite = new byte[] { 0x80 };
|
|
video.drawSprite(sprite, 0, 5, 2, 1, 0x3, false);
|
|
video.scrollDown(3, 0x1);
|
|
Assert.True(video.pixel(0, 5, 5));
|
|
Assert.True(video.pixel(1, 5, 2));
|
|
Assert.False(video.pixel(1, 5, 5));
|
|
}
|
|
|
|
[Fact]
|
|
public void setResolutionHiresResizesAndClears()
|
|
{
|
|
var video = withPixel(5, 2);
|
|
video.setResolution(true);
|
|
Assert.Equal(Video.hiWidth, video.width);
|
|
Assert.Equal(Video.hiHeight, video.height);
|
|
Assert.False(video.pixel(0, 5, 2));
|
|
}
|
|
|
|
[Fact]
|
|
public void drawSpriteWrapsAroundEdgesWhenNotClipping()
|
|
{
|
|
var video = new Video();
|
|
var sprite = new byte[] { 0xC0 };
|
|
video.drawSprite(sprite, 0, 63, 0, 1, 1, true);
|
|
Assert.True(video.pixel(0, 63, 0));
|
|
Assert.True(video.pixel(0, 0, 0));
|
|
}
|
|
|
|
[Fact]
|
|
public void drawSpriteClipsAtEdgeWhenClipping()
|
|
{
|
|
var video = new Video();
|
|
var sprite = new byte[] { 0xC0 };
|
|
video.drawSprite(sprite, 0, 63, 0, 1, 1, false);
|
|
Assert.True(video.pixel(0, 63, 0));
|
|
Assert.False(video.pixel(0, 0, 0));
|
|
}
|
|
|
|
[Fact]
|
|
public void sixteenBySixteenSpriteFillsBlock()
|
|
{
|
|
var video = new Video();
|
|
var sprite = new byte[32];
|
|
for (int index = 0; index < sprite.Length; index++)
|
|
{
|
|
sprite[index] = 0xFF;
|
|
}
|
|
bool collision = video.drawSprite(sprite, 0, 0, 0, 0, 1, false);
|
|
Assert.False(collision);
|
|
Assert.Equal(256, AsciiScreen.litPixelCount(video));
|
|
}
|
|
}
|