...

Source file src/github.com/shurcooL/graphql/internal/jsonutil/benchmark_test.go

Documentation: github.com/shurcooL/graphql/internal/jsonutil

     1  package jsonutil_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"io"
     6  	"reflect"
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/shurcooL/graphql"
    12  	"github.com/shurcooL/graphql/internal/jsonutil"
    13  )
    14  
    15  func TestUnmarshalGraphQL_benchmark(t *testing.T) {
    16  	/*
    17  		query {
    18  			viewer {
    19  				login
    20  				createdAt
    21  			}
    22  		}
    23  	*/
    24  	type query struct {
    25  		Viewer struct {
    26  			Login     graphql.String
    27  			CreatedAt time.Time
    28  		}
    29  	}
    30  	var got query
    31  	err := jsonutil.UnmarshalGraphQL([]byte(`{
    32  		"viewer": {
    33  			"login": "shurcooL-test",
    34  			"createdAt": "2017-06-29T04:12:01Z"
    35  		}
    36  	}`), &got)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	var want query
    41  	want.Viewer.Login = "shurcooL-test"
    42  	want.Viewer.CreatedAt = time.Unix(1498709521, 0).UTC()
    43  	if !reflect.DeepEqual(got, want) {
    44  		t.Error("not equal")
    45  	}
    46  }
    47  
    48  func BenchmarkUnmarshalGraphQL(b *testing.B) {
    49  	type query struct {
    50  		Viewer struct {
    51  			Login     graphql.String
    52  			CreatedAt time.Time
    53  		}
    54  	}
    55  	for i := 0; i < b.N; i++ {
    56  		now := time.Now().UTC()
    57  		var got query
    58  		err := jsonutil.UnmarshalGraphQL([]byte(`{
    59  			"viewer": {
    60  				"login": "shurcooL-test",
    61  				"createdAt": "`+now.Format(time.RFC3339Nano)+`"
    62  			}
    63  		}`), &got)
    64  		if err != nil {
    65  			b.Fatal(err)
    66  		}
    67  		var want query
    68  		want.Viewer.Login = "shurcooL-test"
    69  		want.Viewer.CreatedAt = now
    70  		if !reflect.DeepEqual(got, want) {
    71  			b.Error("not equal")
    72  		}
    73  	}
    74  }
    75  
    76  func BenchmarkJSONUnmarshal(b *testing.B) {
    77  	type query struct {
    78  		Viewer struct {
    79  			Login     graphql.String
    80  			CreatedAt time.Time
    81  		}
    82  	}
    83  	for i := 0; i < b.N; i++ {
    84  		now := time.Now().UTC()
    85  		var got query
    86  		err := json.Unmarshal([]byte(`{
    87  			"viewer": {
    88  				"login": "shurcooL-test",
    89  				"createdAt": "`+now.Format(time.RFC3339Nano)+`"
    90  			}
    91  		}`), &got)
    92  		if err != nil {
    93  			b.Fatal(err)
    94  		}
    95  		var want query
    96  		want.Viewer.Login = "shurcooL-test"
    97  		want.Viewer.CreatedAt = now
    98  		if !reflect.DeepEqual(got, want) {
    99  			b.Error("not equal")
   100  		}
   101  	}
   102  }
   103  
   104  func BenchmarkJSONTokenize(b *testing.B) {
   105  	for i := 0; i < b.N; i++ {
   106  		now := time.Now().UTC()
   107  		dec := json.NewDecoder(strings.NewReader(`{
   108  			"viewer": {
   109  				"login": "shurcooL-test",
   110  				"createdAt": "` + now.Format(time.RFC3339Nano) + `"
   111  			}
   112  		}`))
   113  		var tokens int
   114  		for {
   115  			_, err := dec.Token()
   116  			if err == io.EOF {
   117  				break
   118  			} else if err != nil {
   119  				b.Error(err)
   120  			}
   121  			tokens++
   122  		}
   123  		if tokens != 9 {
   124  			b.Error("not 9 tokens")
   125  		}
   126  	}
   127  }
   128  

View as plain text