mirror of https://github.com/SixLabors/ImageSharp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.4 KiB
145 lines
3.4 KiB
// Copyright (c) Six Labors.
|
|
// Licensed under the Apache License, Version 2.0.
|
|
|
|
using SixLabors.ImageSharp.Formats.Jpeg.Components;
|
|
using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils;
|
|
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace SixLabors.ImageSharp.Tests.Formats.Jpg
|
|
{
|
|
[Trait("Format", "Jpg")]
|
|
public class Block8x8Tests : JpegFixture
|
|
{
|
|
public Block8x8Tests(ITestOutputHelper output)
|
|
: base(output)
|
|
{
|
|
}
|
|
|
|
[Fact]
|
|
public void Construct_And_Indexer_Get()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
|
|
var block = new Block8x8(data);
|
|
|
|
for (int i = 0; i < Block8x8.Size; i++)
|
|
{
|
|
Assert.Equal(data[i], block[i]);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Indexer_Set()
|
|
{
|
|
Block8x8 block = default;
|
|
|
|
block[17] = 17;
|
|
block[42] = 42;
|
|
|
|
Assert.Equal(0, block[0]);
|
|
Assert.Equal(17, block[17]);
|
|
Assert.Equal(42, block[42]);
|
|
}
|
|
|
|
[Fact]
|
|
public unsafe void Indexer_GetScalarAt_SetScalarAt()
|
|
{
|
|
int sum;
|
|
var block = default(Block8x8);
|
|
|
|
for (int i = 0; i < Block8x8.Size; i++)
|
|
{
|
|
Block8x8.SetScalarAt(&block, i, (short)i);
|
|
}
|
|
|
|
sum = 0;
|
|
for (int i = 0; i < Block8x8.Size; i++)
|
|
{
|
|
sum += Block8x8.GetScalarAt(&block, i);
|
|
}
|
|
|
|
Assert.Equal(sum, 64 * 63 / 2);
|
|
}
|
|
|
|
[Fact]
|
|
public void AsFloatBlock()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
|
|
var source = new Block8x8(data);
|
|
|
|
Block8x8F dest = source.AsFloatBlock();
|
|
|
|
for (int i = 0; i < Block8x8F.Size; i++)
|
|
{
|
|
Assert.Equal(data[i], dest[i]);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void ToArray()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
var block = new Block8x8(data);
|
|
|
|
short[] result = block.ToArray();
|
|
|
|
Assert.Equal(data, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equality_WhenTrue()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
var block1 = new Block8x8(data);
|
|
var block2 = new Block8x8(data);
|
|
|
|
block1[0] = 42;
|
|
block2[0] = 42;
|
|
|
|
Assert.Equal(block1, block2);
|
|
Assert.Equal(block1.GetHashCode(), block2.GetHashCode());
|
|
}
|
|
|
|
[Fact]
|
|
public void Equality_WhenFalse()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
var block1 = new Block8x8(data);
|
|
var block2 = new Block8x8(data);
|
|
|
|
block1[0] = 42;
|
|
block2[0] = 666;
|
|
|
|
Assert.NotEqual(block1, block2);
|
|
}
|
|
|
|
[Fact]
|
|
public void IndexerXY()
|
|
{
|
|
Block8x8 block = default;
|
|
block[(8 * 3) + 5] = 42;
|
|
|
|
short value = block[5, 3];
|
|
|
|
Assert.Equal(42, value);
|
|
}
|
|
|
|
[Fact]
|
|
public void TotalDifference()
|
|
{
|
|
short[] data = Create8x8ShortData();
|
|
var block1 = new Block8x8(data);
|
|
var block2 = new Block8x8(data);
|
|
|
|
block2[10] += 7;
|
|
block2[63] += 8;
|
|
|
|
long d = Block8x8.TotalDifference(ref block1, ref block2);
|
|
|
|
Assert.Equal(15, d);
|
|
}
|
|
}
|
|
}
|
|
|