diff options
author | Aliaksandr Valialkin <valyala@gmail.com> | 2015-12-11 16:40:55 +0200 |
---|---|---|
committer | Aliaksandr Valialkin <valyala@gmail.com> | 2015-12-11 16:40:55 +0200 |
commit | b00a213a93e308d9e649777a2fea323f4b0b4796 (patch) | |
tree | 686321705181dd9f253b3072b655ab1fec905c43 /userdata_test.go | |
parent | Added AppendIPv4 and ParseIPv4 helper functions (diff) | |
download | fasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.tar.gz fasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.tar.bz2 fasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.zip |
Moved ctx.UserValue from standard map to custom userData. This should improve its' performance for common case when ctx contains up to 10 user values
Diffstat (limited to 'userdata_test.go')
-rw-r--r-- | userdata_test.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/userdata_test.go b/userdata_test.go new file mode 100644 index 0000000..e4eeaf2 --- /dev/null +++ b/userdata_test.go @@ -0,0 +1,41 @@ +package fasthttp + +import ( + "fmt" + "reflect" + "testing" +) + +func TestUserData(t *testing.T) { + var u userData + + for i := 0; i < 10; i++ { + key := []byte(fmt.Sprintf("key_%d", i)) + u.SetBytes(key, i+5) + testUserDataGet(t, &u, key, i+5) + u.SetBytes(key, i) + testUserDataGet(t, &u, key, i) + } + + for i := 0; i < 10; i++ { + key := []byte(fmt.Sprintf("key_%d", i)) + testUserDataGet(t, &u, key, i) + } + + u.Reset() + + for i := 0; i < 10; i++ { + key := []byte(fmt.Sprintf("key_%d", i)) + testUserDataGet(t, &u, key, nil) + } +} + +func testUserDataGet(t *testing.T, u *userData, key []byte, value interface{}) { + v := u.GetBytes(key) + if v == nil && value != nil { + t.Fatalf("cannot obtain value for key=%q", key) + } + if !reflect.DeepEqual(v, value) { + t.Fatalf("unexpected value for key=%q: %d. Expecting %d", v, value) + } +} |