mirror of https://github.com/SixLabors/ImageSharp
1 changed files with 88 additions and 0 deletions
@ -0,0 +1,88 @@ |
|||
// Copyright (c) Six Labors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
#if SUPPORTS_RUNTIME_INTRINSICS
|
|||
using System.Runtime.Intrinsics.X86; |
|||
#endif
|
|||
using SixLabors.ImageSharp.Formats.Jpeg.Components; |
|||
using SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder; |
|||
using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; |
|||
using SixLabors.ImageSharp.Tests.TestUtilities; |
|||
using Xunit; |
|||
using Xunit.Abstractions; |
|||
|
|||
// ReSharper disable InconsistentNaming
|
|||
namespace SixLabors.ImageSharp.Tests.Formats.Jpg |
|||
{ |
|||
[Trait("Format", "Jpg")] |
|||
public class HuffmanScanEncoderTests |
|||
{ |
|||
private ITestOutputHelper Output { get; } |
|||
|
|||
public HuffmanScanEncoderTests(ITestOutputHelper output) |
|||
{ |
|||
Output = output; |
|||
} |
|||
|
|||
private static int GetHuffmanEncodingLength_Reference(uint number) |
|||
{ |
|||
int bits = 0; |
|||
if (number > 32767) |
|||
{ |
|||
number >>= 16; |
|||
bits += 16; |
|||
} |
|||
if (number > 127) |
|||
{ |
|||
number >>= 8; |
|||
bits += 8; |
|||
} |
|||
if (number > 7) |
|||
{ |
|||
number >>= 4; |
|||
bits += 4; |
|||
} |
|||
if (number > 1) |
|||
{ |
|||
number >>= 2; |
|||
bits += 2; |
|||
} |
|||
if (number > 0) |
|||
{ |
|||
bits++; |
|||
} |
|||
return bits; |
|||
} |
|||
|
|||
[Fact] |
|||
public void GetHuffmanEncodingLength_Zero() |
|||
{ |
|||
int expected = 0; |
|||
|
|||
int actual = HuffmanScanEncoder.GetHuffmanEncodingLength(0); |
|||
|
|||
Assert.Equal(expected, actual); |
|||
} |
|||
|
|||
[Theory] |
|||
[InlineData(1)] |
|||
[InlineData(2)] |
|||
public void GetHuffmanEncodingLength_Random(int seed) |
|||
{ |
|||
int maxNumber = 1 << 16; |
|||
|
|||
var rng = new Random(seed); |
|||
for (int i = 0; i < 1000; i++) |
|||
{ |
|||
uint number = (uint)rng.Next(0, maxNumber); |
|||
|
|||
int expected = GetHuffmanEncodingLength_Reference(number); |
|||
|
|||
int actual = HuffmanScanEncoder.GetHuffmanEncodingLength(number); |
|||
|
|||
Assert.Equal(expected, actual); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue