📷 A modern, cross-platform, 2D Graphics library for .NET
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.
 
 

95 lines
2.7 KiB

// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
using System;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Memory
{
public static class TestStructs
{
public struct Foo : IEquatable<Foo>
{
public int A;
public double B;
public Foo(int a, double b)
{
this.A = a;
this.B = b;
}
internal static Foo[] CreateArray(int size)
{
var result = new Foo[size];
for (int i = 0; i < size; i++)
{
result[i] = new Foo(i + 1, i + 1);
}
return result;
}
public override bool Equals(object obj) => obj is Foo foo && this.Equals(foo);
public bool Equals(Foo other) => this.A.Equals(other.A) && this.B.Equals(other.B);
public override int GetHashCode()
{
int hashCode = -1817952719;
hashCode = (hashCode * -1521134295) + base.GetHashCode();
hashCode = (hashCode * -1521134295) + this.A.GetHashCode();
hashCode = (hashCode * -1521134295) + this.B.GetHashCode();
return hashCode;
}
public override string ToString() => $"({this.A},{this.B})";
}
/// <summary>
/// sizeof(AlignedFoo) == sizeof(long)
/// </summary>
public unsafe struct AlignedFoo : IEquatable<AlignedFoo>
{
public int A;
public int B;
static AlignedFoo()
{
Assert.Equal(sizeof(AlignedFoo), sizeof(long));
}
public AlignedFoo(int a, int b)
{
this.A = a;
this.B = b;
}
public override bool Equals(object obj) => obj is AlignedFoo foo && this.Equals(foo);
public bool Equals(AlignedFoo other) => this.A.Equals(other.A) && this.B.Equals(other.B);
internal static AlignedFoo[] CreateArray(int size)
{
var result = new AlignedFoo[size];
for (int i = 0; i < size; i++)
{
result[i] = new AlignedFoo(i + 1, i + 1);
}
return result;
}
public override int GetHashCode()
{
int hashCode = -1817952719;
hashCode = (hashCode * -1521134295) + base.GetHashCode();
hashCode = (hashCode * -1521134295) + this.A.GetHashCode();
hashCode = (hashCode * -1521134295) + this.B.GetHashCode();
return hashCode;
}
}
}
}