mirror of
https://github.com/SabreTools/SabreTools.IO.git
synced 2026-02-14 05:36:25 +00:00
249 lines
7.7 KiB
C#
249 lines
7.7 KiB
C#
using System;
|
|
using Xunit;
|
|
|
|
namespace SabreTools.Numerics.Test
|
|
{
|
|
public class BothInt64Tests
|
|
{
|
|
[Theory]
|
|
[InlineData(0, 0, true)]
|
|
[InlineData(0, 1, false)]
|
|
public void IsValidTest(long le, long be, bool expected)
|
|
{
|
|
var val = new BothInt64(le, be);
|
|
|
|
Assert.Equal(le, val.LittleEndian);
|
|
Assert.Equal(be, val.BigEndian);
|
|
Assert.Equal(expected, val.IsValid);
|
|
}
|
|
|
|
[Fact]
|
|
public void ImplicitConversionTest()
|
|
{
|
|
long expected = 1;
|
|
var val = new BothInt64(expected, expected);
|
|
|
|
long to = (long)val;
|
|
Assert.Equal(expected, to);
|
|
|
|
BothInt64 back = (BothInt64)to;
|
|
Assert.Equal(expected, back.LittleEndian);
|
|
Assert.Equal(expected, back.BigEndian);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0, -1)]
|
|
[InlineData(1, 0)]
|
|
[InlineData(2, 1)]
|
|
public void CompareToTest(long le, int expected)
|
|
{
|
|
long compare = 1;
|
|
var val = new BothInt64(le, le);
|
|
|
|
int actual = val.CompareTo(compare);
|
|
Assert.Equal(expected, actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetTypeCodeTest()
|
|
{
|
|
TypeCode expected = ((long)1).GetTypeCode();
|
|
|
|
var val = new BothInt64(1, 1);
|
|
Assert.Equal(expected, val.GetTypeCode());
|
|
}
|
|
|
|
[Fact]
|
|
public void ToTypesTest()
|
|
{
|
|
var val = new BothInt64(1, 1);
|
|
|
|
bool expectedBool = Convert.ToBoolean((long)1);
|
|
Assert.Equal(expectedBool, val.ToBoolean(null));
|
|
|
|
char expectedChar = Convert.ToChar((long)1);
|
|
Assert.Equal(expectedChar, val.ToChar(null));
|
|
|
|
sbyte expectedSByte = Convert.ToSByte((long)1);
|
|
Assert.Equal(expectedSByte, val.ToSByte(null));
|
|
|
|
byte expectedByte = Convert.ToByte((long)1);
|
|
Assert.Equal(expectedByte, val.ToByte(null));
|
|
|
|
short expectedInt16 = Convert.ToInt16((long)1);
|
|
Assert.Equal(expectedInt16, val.ToInt16(null));
|
|
|
|
ushort expectedUInt16 = Convert.ToUInt16((long)1);
|
|
Assert.Equal(expectedUInt16, val.ToUInt16(null));
|
|
|
|
int expectedInt32 = Convert.ToInt32((long)1);
|
|
Assert.Equal(expectedInt32, val.ToInt32(null));
|
|
|
|
uint expectedUInt32 = Convert.ToUInt32((long)1);
|
|
Assert.Equal(expectedUInt32, val.ToUInt32(null));
|
|
|
|
long expectedInt64 = Convert.ToInt64((long)1);
|
|
Assert.Equal(expectedInt64, val.ToInt64(null));
|
|
|
|
ulong expectedUInt64 = Convert.ToUInt64((long)1);
|
|
Assert.Equal(expectedUInt64, val.ToUInt64(null));
|
|
|
|
float expectedSingle = Convert.ToSingle((long)1);
|
|
Assert.Equal(expectedSingle, val.ToSingle(null));
|
|
|
|
double expectedDouble = Convert.ToDouble((long)1);
|
|
Assert.Equal(expectedDouble, val.ToDouble(null));
|
|
|
|
decimal expectedDecimal = Convert.ToDecimal((long)1);
|
|
Assert.Equal(expectedDecimal, val.ToDecimal(null));
|
|
|
|
Assert.Throws<InvalidCastException>(() => val.ToDateTime(null));
|
|
|
|
string expectedString = Convert.ToString((long)1);
|
|
Assert.Equal(expectedString, val.ToString(null));
|
|
|
|
ulong expectedObject = Convert.ToUInt64((long)1);
|
|
Assert.Equal(expectedObject, val.ToType(typeof(ulong), null));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0, 0, false)]
|
|
[InlineData(0, 1, false)]
|
|
[InlineData(1, 0, false)]
|
|
[InlineData(1, 1, true)]
|
|
public void Equals_BothEndian(long le, long be, bool expected)
|
|
{
|
|
var val = new BothInt64(le, be);
|
|
var equalTo = new BothInt64(1, 1);
|
|
|
|
bool actual = val.Equals(equalTo);
|
|
Assert.Equal(expected, actual);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0, 0, false)]
|
|
[InlineData(1, 1, true)]
|
|
public void Equals_BaseType(long le, long be, bool expected)
|
|
{
|
|
var val = new BothInt64(le, be);
|
|
long equalTo = 1;
|
|
|
|
bool actual = val.Equals(equalTo);
|
|
Assert.Equal(expected, actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void ArithmeticUnaryOperatorsTest()
|
|
{
|
|
var valA = new BothInt64(2, 2);
|
|
long expected = 3;
|
|
valA++;
|
|
Assert.Equal(expected, valA.LittleEndian);
|
|
Assert.Equal(expected, valA.BigEndian);
|
|
|
|
valA = new BothInt64(2, 2);
|
|
expected = 1;
|
|
valA--;
|
|
Assert.Equal(expected, valA.LittleEndian);
|
|
Assert.Equal(expected, valA.BigEndian);
|
|
|
|
valA = new BothInt64(2, 2);
|
|
expected = 2;
|
|
BothInt64 actual = +valA;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = -2;
|
|
actual = -valA;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
}
|
|
|
|
[Fact]
|
|
public void ArithmeticBinaryOperatorsTest()
|
|
{
|
|
var valA = new BothInt64(3, 3);
|
|
var valB = new BothInt64(2, 2);
|
|
|
|
long expected = 6;
|
|
BothInt64 actual = valA * valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 1;
|
|
actual = valA / valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 1;
|
|
actual = valA % valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 5;
|
|
actual = valA + valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 1;
|
|
actual = valA - valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
}
|
|
|
|
[Fact]
|
|
public void BitwiseUnaryOperatorsTest()
|
|
{
|
|
var valA = new BothInt64(2, 2);
|
|
long expected = ~2;
|
|
BothInt64 actual = ~valA;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
}
|
|
|
|
[Fact]
|
|
public void ShiftBinaryOperatorsTest()
|
|
{
|
|
var valA = new BothInt64(2, 2);
|
|
var valB = new BothInt32(1, 1);
|
|
|
|
long expected = 2 << 1;
|
|
BothInt64 actual = valA << valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 2 >> 1;
|
|
actual = valA >> valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 2 >>> 1;
|
|
actual = valA >>> valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
}
|
|
|
|
[Fact]
|
|
public void BitwiseBinaryOperatorsTest()
|
|
{
|
|
var valA = new BothInt64(3, 3);
|
|
var valB = new BothInt64(2, 2);
|
|
|
|
long expected = 3 & 2;
|
|
BothInt64 actual = valA & valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 3 | 2;
|
|
actual = valA | valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
|
|
expected = 3 ^ 2;
|
|
actual = valA ^ valB;
|
|
Assert.Equal(expected, actual.LittleEndian);
|
|
Assert.Equal(expected, actual.BigEndian);
|
|
}
|
|
}
|
|
}
|