diff --git a/.travis.yml b/.travis.yml index 08ccf137..3fdb01f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,4 +7,4 @@ go: script: - go build ./... - - make local + - make ci_test diff --git a/Makefile b/Makefile index 4f1f098a..214e7e84 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.DEFAULT_GOAL := local +.DEFAULT_GOAL := test Coding/bin/Makefile.base: git clone https://github.com/dedis/Coding @@ -18,14 +18,14 @@ test_examples: .PHONY: test_gotest test_gotest: - go test -v -short -p=1 -timeout=0 ./utils ./ring ./bfv ./dbfv ./dckks - go test -v -short -p=1 -timeout=0 ./ckks -test-bootstrapping + go test -v -timeout=0 ./utils ./ring ./bfv ./dbfv ./dckks + go test -v -timeout=0 ./ckks -test-bootstrapping .PHONY: test test: test_fmt test_gotest test_examples -.PHONY: local -local: test_fmt test_lint test_gotest test_examples +.PHONY: ci_test +ci_test: test_fmt test_lint test_gotest test_examples %: force Coding/bin/Makefile.base @$(MAKE) -f Coding/bin/Makefile.base $@ diff --git a/bfv/bfv_test.go b/bfv/bfv_test.go index 835adb01..c6f22213 100644 --- a/bfv/bfv_test.go +++ b/bfv/bfv_test.go @@ -1,6 +1,7 @@ package bfv import ( + "flag" "fmt" "math/rand" "testing" @@ -13,6 +14,8 @@ import ( "github.com/ldsec/lattigo/v2/utils" ) +var flagLongTest = flag.Bool("long", false, "run the long test suite (all parameters). Overrides -short and requires -timeout=0.") + func testString(opname string, p *Parameters) string { return fmt.Sprintf("%sLogN=%d/logQ=%d/alpha=%d/beta=%d", opname, p.logN, p.LogQP(), p.Alpha(), p.Beta()) } @@ -42,12 +45,13 @@ func TestBFV(t *testing.T) { rand.Seed(time.Now().UnixNano()) - var defaultParams []*Parameters - + var defaultParams = DefaultParams[PN12QP109 : PN12QP109+4] // the default test runs for ring degree N=2^12, 2^13, 2^14, 2^15 if testing.Short() { - defaultParams = DefaultParams[PN12QP109 : PN12QP109+3] - } else { - defaultParams = DefaultParams + defaultParams = DefaultParams[PN12QP109 : PN12QP109+2] // the short test suite runs for ring degree N=2^12, 2^13 + } + if *flagLongTest { + defaultParams = DefaultParams // the long test suite runs for all default parameters + fmt.Println("bfv runing in long mode") } for _, p := range defaultParams { diff --git a/ckks/bootstrapp_bench_test.go b/ckks/bootstrapp_bench_test.go index 9f355206..79f6a78d 100644 --- a/ckks/bootstrapp_bench_test.go +++ b/ckks/bootstrapp_bench_test.go @@ -7,6 +7,11 @@ import ( ) func BenchmarkBootstrapp(b *testing.B) { + + if !*testBootstrapping { + b.Skip("skipping bootstrapping test") + } + var err error var testContext = new(testParams) var btp *Bootstrapper diff --git a/ckks/bootstrapp_test.go b/ckks/bootstrapp_test.go index a0096ee3..0f1f1026 100644 --- a/ckks/bootstrapp_test.go +++ b/ckks/bootstrapp_test.go @@ -41,7 +41,7 @@ func TestBootstrapp(t *testing.T) { SineScale := math.Exp2(math.Round(math.Log2(float64(q)))) // Insecure params for fast testing only - if testing.Short() { + if !*flagLongTest { params.logN = 14 params.logSlots = 13 } diff --git a/ckks/ckks_test.go b/ckks/ckks_test.go index 8c69dbbb..1c020ab2 100644 --- a/ckks/ckks_test.go +++ b/ckks/ckks_test.go @@ -16,8 +16,10 @@ import ( "github.com/stretchr/testify/require" ) +var flagLongTest = flag.Bool("long", false, "run the long test suite (all parameters + secure bootstrapping). Overrides -short and requires -timeout=0.") var printPrecisionStats = flag.Bool("print-precision", false, "print precision stats") var testBootstrapping = flag.Bool("test-bootstrapping", false, "run the bootstrapping tests (memory intensive)") + var minPrec float64 = 15.0 func testString(testContext *testParams, opname string) string { @@ -55,12 +57,12 @@ func TestCKKS(t *testing.T) { var err error var testContext = new(testParams) - var defaultParams []*Parameters - + var defaultParams = DefaultParams[PN12QP109 : PN12QP109+4] // the default test runs for ring degree N=2^12, 2^13, 2^14, 2^15 if testing.Short() { - defaultParams = DefaultParams[PN12QP109 : PN12QP109+3] - } else { - defaultParams = DefaultParams + defaultParams = DefaultParams[PN12QP109 : PN12QP109+2] // the short test suite runs for ring degree N=2^12, 2^13 + } + if *flagLongTest { + defaultParams = DefaultParams // the long test suite runs for all default parameters } for _, defaultParam := range defaultParams { @@ -952,7 +954,6 @@ func testMarshaller(testContext *testParams, t *testing.T) { t.Run("Marshaller/Ciphertext/", func(t *testing.T) { t.Run(testString(testContext, "EndToEnd/"), func(t *testing.T) { - t.Parallel() ciphertextWant := NewCiphertextRandom(testContext.prng, testContext.params, 2, testContext.params.MaxLevel(), testContext.params.Scale()) @@ -972,7 +973,6 @@ func testMarshaller(testContext *testParams, t *testing.T) { }) t.Run(testString(testContext, "Minimal/"), func(t *testing.T) { - t.Parallel() ciphertext := NewCiphertextRandom(testContext.prng, testContext.params, 0, testContext.params.MaxLevel(), testContext.params.Scale()) diff --git a/dbfv/dbfv_test.go b/dbfv/dbfv_test.go index 88bf2141..641ff430 100644 --- a/dbfv/dbfv_test.go +++ b/dbfv/dbfv_test.go @@ -1,6 +1,7 @@ package dbfv import ( + "flag" "fmt" "log" "math/big" @@ -12,6 +13,7 @@ import ( "github.com/stretchr/testify/require" ) +var flagLongTest = flag.Bool("long", false, "run the long test suite (all parameters). Overrides -short and requires -timeout=0.") var parties uint64 = 3 func testString(opname string, parties uint64, params *bfv.Parameters) string { @@ -48,14 +50,13 @@ func Test_DBFV(t *testing.T) { var err error var testCtx = new(testContext) - var defaultParams []*bfv.Parameters - + var defaultParams = bfv.DefaultParams[bfv.PN12QP109 : bfv.PN12QP109+4] // the default test runs for ring degree N=2^12, 2^13, 2^14, 2^15 if testing.Short() { - defaultParams = bfv.DefaultParams[bfv.PN12QP109 : bfv.PN12QP109+3] - } else { - defaultParams = bfv.DefaultParams + defaultParams = bfv.DefaultParams[bfv.PN12QP109 : bfv.PN12QP109+2] // the short test runs for ring degree N=2^12, 2^13 + } + if *flagLongTest { + defaultParams = bfv.DefaultParams // the long test suite runs for all default parameters } - for _, p := range defaultParams { if testCtx, err = gentestContext(p); err != nil { diff --git a/dckks/dckks_test.go b/dckks/dckks_test.go index f963a560..42b0d88f 100644 --- a/dckks/dckks_test.go +++ b/dckks/dckks_test.go @@ -14,6 +14,7 @@ import ( "github.com/ldsec/lattigo/v2/utils" ) +var flagLongTest = flag.Bool("long", false, "run the long test suite (all parameters). Overrides -short and requires -timeout=0.") var printPrecisionStats = flag.Bool("print-precision", false, "print precision stats") var minPrec float64 = 15.0 var parties uint64 = 3 @@ -58,12 +59,12 @@ func TestDCKKS(t *testing.T) { var err error var testCtx = new(testContext) - var defaultParams []*ckks.Parameters - + var defaultParams = ckks.DefaultParams[ckks.PN12QP109 : ckks.PN12QP109+4] // the default test runs for ring degree N=2^12, 2^13, 2^14, 2^15 if testing.Short() { - defaultParams = ckks.DefaultParams[ckks.PN12QP109 : ckks.PN12QP109+3] - } else { - defaultParams = ckks.DefaultParams + defaultParams = ckks.DefaultParams[ckks.PN12QP109 : ckks.PN12QP109+2] // the short test runs for ring degree N=2^12, 2^13 + } + if *flagLongTest { + defaultParams = ckks.DefaultParams // the long test suite runs for all default parameters } for _, p := range defaultParams { diff --git a/ring/ring_test.go b/ring/ring_test.go index 8ab9083d..8f835b67 100644 --- a/ring/ring_test.go +++ b/ring/ring_test.go @@ -1,6 +1,7 @@ package ring import ( + "flag" "fmt" "math/big" "math/bits" @@ -13,6 +14,8 @@ import ( "github.com/stretchr/testify/require" ) +var flagLongTest = flag.Bool("long", false, "run the long test suite (all parameters). Overrides -short and requires -timeout=0.") + var T = uint64(0x3ee0001) var DefaultSigma = float64(3.2) var DefaultBound = uint64(6 * DefaultSigma) @@ -51,12 +54,13 @@ func TestRing(t *testing.T) { rand.Seed(time.Now().UnixNano()) var err error - var defaultParams []*Parameters + var defaultParams = DefaultParams[0:4] // the default test if testing.Short() { - defaultParams = DefaultParams[0:3] - } else { - defaultParams = DefaultParams + defaultParams = DefaultParams[0:2] // the short test suite + } + if *flagLongTest { + defaultParams = DefaultParams // the long test suite } testNewRing(t)