From 9aa51880f1714e4d9506e6e874aeeef013d3a79c Mon Sep 17 00:00:00 2001 From: lunfardo314 <evaldas.drasutis@iota.org> Date: Mon, 25 May 2020 17:03:18 +0300 Subject: [PATCH] - optimized address sorting in NewOutputs - unit tests cleanup --- dapps/valuetransfers/packages/address/sort.go | 25 ----------------- .../packages/transaction/outputs.go | 7 ++++- .../packages/transaction/outputs_test.go | 7 ++--- .../packages/transaction/transaction_test.go | 28 +++++++++---------- 4 files changed, 21 insertions(+), 46 deletions(-) delete mode 100644 dapps/valuetransfers/packages/address/sort.go diff --git a/dapps/valuetransfers/packages/address/sort.go b/dapps/valuetransfers/packages/address/sort.go deleted file mode 100644 index 933d74dd..00000000 --- a/dapps/valuetransfers/packages/address/sort.go +++ /dev/null @@ -1,25 +0,0 @@ -package address - -import ( - "bytes" - "sort" -) - -type sortedAddresses []Address - -func (s sortedAddresses) Len() int { - return len(s) -} - -func (s sortedAddresses) Less(i, j int) bool { - return bytes.Compare(s[i][:], s[j][:]) < 0 -} - -func (s sortedAddresses) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -// Sort function sorts the slice of addresses -func Sort(addresses []Address) { - sort.Sort(sortedAddresses(addresses)) -} diff --git a/dapps/valuetransfers/packages/transaction/outputs.go b/dapps/valuetransfers/packages/transaction/outputs.go index 25511b27..4cd77a3f 100644 --- a/dapps/valuetransfers/packages/transaction/outputs.go +++ b/dapps/valuetransfers/packages/transaction/outputs.go @@ -1,7 +1,9 @@ package transaction import ( + "bytes" "github.com/iotaledger/hive.go/marshalutil" + "sort" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address" "github.com/iotaledger/goshimmer/packages/binary/datastructure/orderedmap" @@ -21,7 +23,10 @@ func NewOutputs(outputs map[address.Address][]*balance.Balance) (result *Outputs for a := range outputs { toSort = append(toSort, a) } - address.Sort(toSort) + + sort.Slice(toSort, func(i, j int) bool { + return bytes.Compare(toSort[i][:], toSort[j][:]) < 0 + }) result = &Outputs{orderedmap.New()} for _, addr := range toSort { diff --git a/dapps/valuetransfers/packages/transaction/outputs_test.go b/dapps/valuetransfers/packages/transaction/outputs_test.go index 13e783a0..85d0fe6e 100644 --- a/dapps/valuetransfers/packages/transaction/outputs_test.go +++ b/dapps/valuetransfers/packages/transaction/outputs_test.go @@ -2,12 +2,12 @@ package transaction import ( "bytes" + "github.com/stretchr/testify/assert" "testing" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance" - "github.com/magiconair/properties/assert" "golang.org/x/crypto/blake2b" ) @@ -29,9 +29,6 @@ func TestOutputs(t *testing.T) { } out2 := NewOutputs(theMap2) - //t.Logf("%s", out1.String()) - //t.Logf("%s", out2.String()) - h1 := hashOutputs(t, out1) h2 := hashOutputs(t, out2) @@ -40,7 +37,7 @@ func TestOutputs(t *testing.T) { func hashOutputs(t *testing.T, out *Outputs) []byte { h, err := blake2b.New256(nil) - assert.Equal(t, err, nil) + assert.NoError(t, err) h.Write(out.Bytes()) return h.Sum(nil) diff --git a/dapps/valuetransfers/packages/transaction/transaction_test.go b/dapps/valuetransfers/packages/transaction/transaction_test.go index 4b2411b6..38bee17b 100644 --- a/dapps/valuetransfers/packages/transaction/transaction_test.go +++ b/dapps/valuetransfers/packages/transaction/transaction_test.go @@ -38,7 +38,7 @@ func TestShortDataPayload(t *testing.T) { dataPayload := []byte("data payload test") err := tx.SetDataPayload(dataPayload) - assert.Equal(t, nil, err) + assert.NoError(t, err) dpBack := tx.GetDataPayload() assert.Equal(t, true, bytes.Equal(dpBack, dataPayload)) @@ -52,7 +52,7 @@ func TestShortDataPayload(t *testing.T) { tx.essenceBytes = nil dataPayload[2] = '?' err = tx.SetDataPayload(dataPayload) - assert.Equal(t, nil, err) + assert.NoError(t, err) // expect signature is not valid check = tx.SignaturesValid() @@ -70,7 +70,7 @@ func TestTooLongDataPayload(t *testing.T) { dataPayload := []byte(strings.Repeat("1", MaxDataPayloadSize+1)) err := tx.SetDataPayload(dataPayload) - assert.Equal(t, true, err != nil) + assert.Error(t, err) } func TestMarshalingEmptyDataPayload(t *testing.T) { @@ -90,9 +90,8 @@ func TestMarshalingEmptyDataPayload(t *testing.T) { tx1 := Transaction{} _, err := tx1.UnmarshalObjectStorageValue(v) - if err != nil { - assert.Error(t, err) - } + assert.NoError(t, err) + assert.Equal(t, true, tx1.SignaturesValid()) assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes())) } @@ -108,7 +107,7 @@ func TestMarshalingDataPayload(t *testing.T) { dataPayload := []byte("data payload test") err := tx.SetDataPayload(dataPayload) - assert.Equal(t, nil, err) + assert.NoError(t, err) tx.Sign(sigScheme) check := tx.SignaturesValid() @@ -119,7 +118,7 @@ func TestMarshalingDataPayload(t *testing.T) { tx1 := Transaction{} _, err = tx1.UnmarshalObjectStorageValue(v) - assert.Equal(t, nil, err) + assert.NoError(t, err) assert.Equal(t, true, tx1.SignaturesValid()) assert.Equal(t, true, bytes.Equal(tx1.ID().Bytes(), tx.ID().Bytes())) @@ -136,13 +135,13 @@ func TestPutSignatureValid(t *testing.T) { dataPayload := []byte("data payload test") err := tx.SetDataPayload(dataPayload) - assert.Equal(t, nil, err) + assert.NoError(t, err) signature := sigScheme.Sign(tx.EssenceBytes()) assert.Equal(t, signature.IsValid(tx.EssenceBytes()), true) err = tx.PutSignature(signature) - assert.Equal(t, nil, err) + assert.NoError(t, err) check := tx.SignaturesValid() assert.Equal(t, true, check) @@ -159,7 +158,7 @@ func TestPutSignatureInvalid(t *testing.T) { dataPayload := []byte("data payload test") err := tx.SetDataPayload(dataPayload) - assert.Equal(t, nil, err) + assert.NoError(t, err) signatureValid := sigScheme.Sign(tx.EssenceBytes()) assert.Equal(t, true, signatureValid.IsValid(tx.EssenceBytes())) @@ -171,22 +170,21 @@ func TestPutSignatureInvalid(t *testing.T) { sigCorrupted, consumed, err := signaturescheme.BLSSignatureFromBytes(sigBytes) - assert.Equal(t, nil, err) + assert.NoError(t, err) assert.Equal(t, consumed, len(sigBytes)) assert.Equal(t, false, sigCorrupted.IsValid(tx.EssenceBytes())) err = tx.PutSignature(sigCorrupted) // error expected - assert.Equal(t, true, err != nil) + assert.Error(t, err) // 0 signatures is not valid assert.Equal(t, true, !tx.SignaturesValid()) err = tx.PutSignature(signatureValid) // no error expected - assert.Equal(t, nil, err) + assert.NoError(t, err) // valid signatures expected assert.Equal(t, true, tx.SignaturesValid()) - } -- GitLab