]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/mth_test.go
Sequential MTH optimization
[nncp.git] / src / mth_test.go
index 2d36f07a95067eb8f3eb9b52cf0cc50d3ce34acd..a4737c09d7efbf6399420ecefc25d04eed074703 100644 (file)
@@ -26,7 +26,7 @@ import (
        "lukechampine.com/blake3"
 )
 
-func TestMTHSymmetric(t *testing.T) {
+func TestMTHFatSymmetric(t *testing.T) {
        xof := blake3.New(32, nil).XOF()
        f := func(size uint32, offset uint32) bool {
                size %= 2 * 1024 * 1024
@@ -36,13 +36,13 @@ func TestMTHSymmetric(t *testing.T) {
                }
                offset = offset % size
 
-               mth := MTHNew(int64(size), 0)
+               mth := MTHFatNew(int64(size), 0)
                if _, err := io.Copy(mth, bytes.NewReader(data)); err != nil {
                        panic(err)
                }
                hsh0 := mth.Sum(nil)
 
-               mth = MTHNew(int64(size), int64(offset))
+               mth = MTHFatNew(int64(size), int64(offset))
                if _, err := io.Copy(mth, bytes.NewReader(data[int(offset):])); err != nil {
                        panic(err)
                }
@@ -53,14 +53,14 @@ func TestMTHSymmetric(t *testing.T) {
                        return false
                }
 
-               mth = MTHNew(0, 0)
+               mth = MTHFatNew(0, 0)
                mth.Write(data)
                if bytes.Compare(hsh0, mth.Sum(nil)) != 0 {
                        return false
                }
 
                data = append(data, 0)
-               mth = MTHNew(int64(size)+1, 0)
+               mth = MTHFatNew(int64(size)+1, 0)
                if _, err := io.Copy(mth, bytes.NewReader(data)); err != nil {
                        panic(err)
                }
@@ -69,7 +69,7 @@ func TestMTHSymmetric(t *testing.T) {
                        return false
                }
 
-               mth = MTHNew(int64(size)+1, int64(offset))
+               mth = MTHFatNew(int64(size)+1, int64(offset))
                if _, err := io.Copy(mth, bytes.NewReader(data[int(offset):])); err != nil {
                        panic(err)
                }
@@ -80,7 +80,7 @@ func TestMTHSymmetric(t *testing.T) {
                        return false
                }
 
-               mth = MTHNew(0, 0)
+               mth = MTHFatNew(0, 0)
                mth.Write(data)
                if bytes.Compare(hsh00, mth.Sum(nil)) != 0 {
                        return false
@@ -93,10 +93,42 @@ func TestMTHSymmetric(t *testing.T) {
        }
 }
 
+func TestMTHSeqAndFatEqual(t *testing.T) {
+       xof := blake3.New(32, nil).XOF()
+       f := func(size uint32, offset uint32) bool {
+               size %= 10 * 1024 * 1024
+               data := make([]byte, int(size), int(size)+1)
+               if _, err := io.ReadFull(xof, data); err != nil {
+                       panic(err)
+               }
+               fat := MTHFatNew(int64(size), 0)
+               if _, err := io.Copy(fat, bytes.NewReader(data)); err != nil {
+                       panic(err)
+               }
+               hshFat := fat.Sum(nil)
+               seq := MTHSeqNew()
+               if _, err := io.Copy(seq, bytes.NewReader(data)); err != nil {
+                       panic(err)
+               }
+               return bytes.Compare(hshFat, seq.Sum(nil)) == 0
+       }
+       if err := quick.Check(f, nil); err != nil {
+               t.Error(err)
+       }
+}
+
 func TestMTHNull(t *testing.T) {
-       mth := MTHNew(0, 0)
-       if _, err := mth.Write(nil); err != nil {
+       fat := MTHFatNew(0, 0)
+       if _, err := fat.Write(nil); err != nil {
                t.Error(err)
        }
-       mth.Sum(nil)
+       hshFat := fat.Sum(nil)
+
+       seq := MTHSeqNew()
+       if _, err := seq.Write(nil); err != nil {
+               t.Error(err)
+       }
+       if bytes.Compare(hshFat, seq.Sum(nil)) != 0 {
+               t.FailNow()
+       }
 }