github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/shed/field_uint64_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:44</date>
    10  //</624450117847486464>
    11  
    12  
    13  package shed
    14  
    15  import (
    16  	"testing"
    17  
    18  	"github.com/syndtr/goleveldb/leveldb"
    19  )
    20  
    21  //testuint64字段验证Put和Get操作
    22  //在uint64字段中。
    23  func TestUint64Field(t *testing.T) {
    24  	db, cleanupFunc := newTestDB(t)
    25  	defer cleanupFunc()
    26  
    27  	counter, err := db.NewUint64Field("counter")
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	t.Run("get empty", func(t *testing.T) {
    33  		got, err := counter.Get()
    34  		if err != nil {
    35  			t.Fatal(err)
    36  		}
    37  		var want uint64
    38  		if got != want {
    39  			t.Errorf("got uint64 %v, want %v", got, want)
    40  		}
    41  	})
    42  
    43  	t.Run("put", func(t *testing.T) {
    44  		var want uint64 = 42
    45  		err = counter.Put(want)
    46  		if err != nil {
    47  			t.Fatal(err)
    48  		}
    49  		got, err := counter.Get()
    50  		if err != nil {
    51  			t.Fatal(err)
    52  		}
    53  		if got != want {
    54  			t.Errorf("got uint64 %v, want %v", got, want)
    55  		}
    56  
    57  		t.Run("overwrite", func(t *testing.T) {
    58  			var want uint64 = 84
    59  			err = counter.Put(want)
    60  			if err != nil {
    61  				t.Fatal(err)
    62  			}
    63  			got, err := counter.Get()
    64  			if err != nil {
    65  				t.Fatal(err)
    66  			}
    67  			if got != want {
    68  				t.Errorf("got uint64 %v, want %v", got, want)
    69  			}
    70  		})
    71  	})
    72  
    73  	t.Run("put in batch", func(t *testing.T) {
    74  		batch := new(leveldb.Batch)
    75  		var want uint64 = 42
    76  		counter.PutInBatch(batch, want)
    77  		err = db.WriteBatch(batch)
    78  		if err != nil {
    79  			t.Fatal(err)
    80  		}
    81  		got, err := counter.Get()
    82  		if err != nil {
    83  			t.Fatal(err)
    84  		}
    85  		if got != want {
    86  			t.Errorf("got uint64 %v, want %v", got, want)
    87  		}
    88  
    89  		t.Run("overwrite", func(t *testing.T) {
    90  			batch := new(leveldb.Batch)
    91  			var want uint64 = 84
    92  			counter.PutInBatch(batch, want)
    93  			err = db.WriteBatch(batch)
    94  			if err != nil {
    95  				t.Fatal(err)
    96  			}
    97  			got, err := counter.Get()
    98  			if err != nil {
    99  				t.Fatal(err)
   100  			}
   101  			if got != want {
   102  				t.Errorf("got uint64 %v, want %v", got, want)
   103  			}
   104  		})
   105  	})
   106  }
   107  
   108  //TESTUINT64字段_inc验证inc操作
   109  //在uint64字段中。
   110  func TestUint64Field_Inc(t *testing.T) {
   111  	db, cleanupFunc := newTestDB(t)
   112  	defer cleanupFunc()
   113  
   114  	counter, err := db.NewUint64Field("counter")
   115  	if err != nil {
   116  		t.Fatal(err)
   117  	}
   118  
   119  	var want uint64 = 1
   120  	got, err := counter.Inc()
   121  	if err != nil {
   122  		t.Fatal(err)
   123  	}
   124  	if got != want {
   125  		t.Errorf("got uint64 %v, want %v", got, want)
   126  	}
   127  
   128  	want = 2
   129  	got, err = counter.Inc()
   130  	if err != nil {
   131  		t.Fatal(err)
   132  	}
   133  	if got != want {
   134  		t.Errorf("got uint64 %v, want %v", got, want)
   135  	}
   136  }
   137  
   138  //testuint64字段“incinbatch”验证incinbatch操作
   139  //在uint64字段中。
   140  func TestUint64Field_IncInBatch(t *testing.T) {
   141  	db, cleanupFunc := newTestDB(t)
   142  	defer cleanupFunc()
   143  
   144  	counter, err := db.NewUint64Field("counter")
   145  	if err != nil {
   146  		t.Fatal(err)
   147  	}
   148  
   149  	batch := new(leveldb.Batch)
   150  	var want uint64 = 1
   151  	got, err := counter.IncInBatch(batch)
   152  	if err != nil {
   153  		t.Fatal(err)
   154  	}
   155  	if got != want {
   156  		t.Errorf("got uint64 %v, want %v", got, want)
   157  	}
   158  	err = db.WriteBatch(batch)
   159  	if err != nil {
   160  		t.Fatal(err)
   161  	}
   162  	got, err = counter.Get()
   163  	if err != nil {
   164  		t.Fatal(err)
   165  	}
   166  	if got != want {
   167  		t.Errorf("got uint64 %v, want %v", got, want)
   168  	}
   169  
   170  	batch2 := new(leveldb.Batch)
   171  	want = 2
   172  	got, err = counter.IncInBatch(batch2)
   173  	if err != nil {
   174  		t.Fatal(err)
   175  	}
   176  	if got != want {
   177  		t.Errorf("got uint64 %v, want %v", got, want)
   178  	}
   179  	err = db.WriteBatch(batch2)
   180  	if err != nil {
   181  		t.Fatal(err)
   182  	}
   183  	got, err = counter.Get()
   184  	if err != nil {
   185  		t.Fatal(err)
   186  	}
   187  	if got != want {
   188  		t.Errorf("got uint64 %v, want %v", got, want)
   189  	}
   190  }
   191  
   192  //TESTUINT64字段“DEC验证DEC操作”
   193  //在uint64字段中。
   194  func TestUint64Field_Dec(t *testing.T) {
   195  	db, cleanupFunc := newTestDB(t)
   196  	defer cleanupFunc()
   197  
   198  	counter, err := db.NewUint64Field("counter")
   199  	if err != nil {
   200  		t.Fatal(err)
   201  	}
   202  
   203  //测试溢出保护
   204  	var want uint64
   205  	got, err := counter.Dec()
   206  	if err != nil {
   207  		t.Fatal(err)
   208  	}
   209  	if got != want {
   210  		t.Errorf("got uint64 %v, want %v", got, want)
   211  	}
   212  
   213  	want = 32
   214  	err = counter.Put(want)
   215  	if err != nil {
   216  		t.Fatal(err)
   217  	}
   218  
   219  	want = 31
   220  	got, err = counter.Dec()
   221  	if err != nil {
   222  		t.Fatal(err)
   223  	}
   224  	if got != want {
   225  		t.Errorf("got uint64 %v, want %v", got, want)
   226  	}
   227  }
   228  
   229  //testuint64字段“decinbatch”验证decinbatch操作
   230  //在uint64字段中。
   231  func TestUint64Field_DecInBatch(t *testing.T) {
   232  	db, cleanupFunc := newTestDB(t)
   233  	defer cleanupFunc()
   234  
   235  	counter, err := db.NewUint64Field("counter")
   236  	if err != nil {
   237  		t.Fatal(err)
   238  	}
   239  
   240  	batch := new(leveldb.Batch)
   241  	var want uint64
   242  	got, err := counter.DecInBatch(batch)
   243  	if err != nil {
   244  		t.Fatal(err)
   245  	}
   246  	if got != want {
   247  		t.Errorf("got uint64 %v, want %v", got, want)
   248  	}
   249  	err = db.WriteBatch(batch)
   250  	if err != nil {
   251  		t.Fatal(err)
   252  	}
   253  	got, err = counter.Get()
   254  	if err != nil {
   255  		t.Fatal(err)
   256  	}
   257  	if got != want {
   258  		t.Errorf("got uint64 %v, want %v", got, want)
   259  	}
   260  
   261  	batch2 := new(leveldb.Batch)
   262  	want = 42
   263  	counter.PutInBatch(batch2, want)
   264  	err = db.WriteBatch(batch2)
   265  	if err != nil {
   266  		t.Fatal(err)
   267  	}
   268  	got, err = counter.Get()
   269  	if err != nil {
   270  		t.Fatal(err)
   271  	}
   272  	if got != want {
   273  		t.Errorf("got uint64 %v, want %v", got, want)
   274  	}
   275  
   276  	batch3 := new(leveldb.Batch)
   277  	want = 41
   278  	got, err = counter.DecInBatch(batch3)
   279  	if err != nil {
   280  		t.Fatal(err)
   281  	}
   282  	if got != want {
   283  		t.Errorf("got uint64 %v, want %v", got, want)
   284  	}
   285  	err = db.WriteBatch(batch3)
   286  	if err != nil {
   287  		t.Fatal(err)
   288  	}
   289  	got, err = counter.Get()
   290  	if err != nil {
   291  		t.Fatal(err)
   292  	}
   293  	if got != want {
   294  		t.Errorf("got uint64 %v, want %v", got, want)
   295  	}
   296  }
   297