func AssertProtoEqual(t *testing.T, expected checksums.Checksums, actual checksums.ChecksumsProto) {
	t.Helper()
	assert.Equal(t, expected.MD5, actual.GetMd5())
	assert.Equal(t, expected.GetCRC32C(), actual.GetCrc32C())
	assert.Equal(t, expected.HasCRC32C, actual.GetHasCrc32C())
}
AssertProtoEquals checks actual has the same values as expected.
package checksumstest
import (
	"crypto/md5"
	"math/rand"
	"testing"
	"cloud.google.com/go/datastore"
	"github.com/googleforgames/open-saves/internal/pkg/metadb/checksums"
	"github.com/stretchr/testify/assert"
)
func AssertPropertyListMatch(t *testing.T, expected checksums.Checksums, actual []datastore.Property) {
	t.Helper()
	ps, err := datastore.SaveStruct(&expected)
	if assert.NoError(t, err) {
		assert.ElementsMatch(t, ps, actual)
	}
}
func ChecksumsToProperties(t *testing.T, c checksums.Checksums) []datastore.Property {
	t.Helper()
	ps, err := datastore.SaveStruct(&c)
	assert.NoError(t, err)
	return ps
}
func RandomChecksums(t *testing.T) checksums.Checksums {
	t.Helper()
	md5 := make([]byte, md5.Size)
	rand.Read(md5)
	return checksums.Checksums{
		MD5:       md5,
		CRC32C:    int32(rand.Uint32()),
		HasCRC32C: true,
	}
}