Files
icicle/wrappers/golang/core/msm_test.go
nonam3e f8d15e2613 update imports in golang bindings (#498)
## Describe the changes

This PR updates imports in golang bindings to the v2 version
2024-04-25 03:46:14 +07:00

107 lines
3.1 KiB
Go

package core
import (
"testing"
"github.com/ingonyama-zk/icicle/v2/wrappers/golang/core/internal"
cr "github.com/ingonyama-zk/icicle/v2/wrappers/golang/cuda_runtime"
"github.com/stretchr/testify/assert"
)
func TestMSMDefaultConfig(t *testing.T) {
ctx, _ := cr.GetDefaultDeviceContext()
expected := MSMConfig{
ctx, // Ctx
0, // pointsSize
1, // PrecomputeFactor
0, // C
0, // Bitsize
10, // LargeBucketFactor
1, // batchSize
false, // areScalarsOnDevice
false, // AreScalarsMontgomeryForm
false, // arePointsOnDevice
false, // ArePointsMontgomeryForm
false, // areResultsOnDevice
false, // IsBigTriangle
false, // IsAsync
}
actual := GetDefaultMSMConfig()
assert.Equal(t, expected, actual)
}
func TestMSMCheckHostSlices(t *testing.T) {
cfg := GetDefaultMSMConfig()
rawScalars := make([]internal.MockBaseField, 10)
for i := range rawScalars {
var emptyField internal.MockBaseField
emptyField.One()
rawScalars[i] = emptyField
}
scalars := HostSliceFromElements[internal.MockBaseField](rawScalars)
affine := internal.MockAffine{}
var emptyField internal.MockBaseField
emptyField.One()
affine.FromLimbs(emptyField.GetLimbs(), emptyField.GetLimbs())
rawAffinePoints := make([]internal.MockAffine, 10)
for i := range rawAffinePoints {
rawAffinePoints[i] = affine
}
points := HostSliceFromElements[internal.MockAffine](rawAffinePoints)
output := make(HostSlice[internal.MockProjective], 1)
assert.NotPanics(t, func() { MsmCheck(scalars, points, &cfg, output) })
assert.False(t, cfg.areScalarsOnDevice)
assert.False(t, cfg.arePointsOnDevice)
assert.False(t, cfg.areResultsOnDevice)
assert.Equal(t, int32(1), cfg.batchSize)
output2 := make(HostSlice[internal.MockProjective], 3)
assert.Panics(t, func() { MsmCheck(scalars, points, &cfg, output2) })
}
func TestMSMCheckDeviceSlices(t *testing.T) {
cfg := GetDefaultMSMConfig()
rawScalars := make([]internal.MockBaseField, 10)
for i := range rawScalars {
var emptyField internal.MockBaseField
emptyField.One()
rawScalars[i] = emptyField
}
scalars := HostSliceFromElements[internal.MockBaseField](rawScalars)
var scalarsOnDevice DeviceSlice
scalars.CopyToDevice(&scalarsOnDevice, true)
affine := internal.MockAffine{}
var emptyField internal.MockBaseField
emptyField.One()
affine.FromLimbs(emptyField.GetLimbs(), emptyField.GetLimbs())
rawAffinePoints := make([]internal.MockAffine, 10)
for i := range rawAffinePoints {
rawAffinePoints[i] = affine
}
points := HostSliceFromElements[internal.MockAffine](rawAffinePoints)
var pointsOnDevice DeviceSlice
points.CopyToDevice(&pointsOnDevice, true)
output := make(HostSlice[internal.MockProjective], 1)
assert.NotPanics(t, func() { MsmCheck(scalarsOnDevice, pointsOnDevice, &cfg, output) })
assert.True(t, cfg.areScalarsOnDevice)
assert.True(t, cfg.arePointsOnDevice)
assert.False(t, cfg.areResultsOnDevice)
assert.Equal(t, int32(1), cfg.batchSize)
output2 := make(HostSlice[internal.MockProjective], 3)
assert.Panics(t, func() { MsmCheck(scalarsOnDevice, pointsOnDevice, &cfg, output2) })
}
// TODO add check for batches and batchSize