aboutsummaryrefslogtreecommitdiff
path: root/src/internal/pkgbits/pkgbits_test.go
diff options
context:
space:
mode:
authorTim King <taking@google.com>2024-08-14 12:34:32 -0700
committerTim King <taking@google.com>2024-08-20 21:55:59 +0000
commit830621bc09c175d1b87496fd1be79bdcd1ce27c8 (patch)
treee00c1bb5234e61703f166935f7df97788c7d3199 /src/internal/pkgbits/pkgbits_test.go
parent54c948de9a18949c88b1453d3288253f86256ce9 (diff)
downloadgo-830621bc09c175d1b87496fd1be79bdcd1ce27c8.tar.xz
internal/pkgbits: add Version type
Adds a new Version type to pkgbits to represent the version of the bitstream. Versions let readers and writers know when different data is expected to be present or not in the bitstream. These different pieces of data are called Fields, as an analogy with fields of a struct. Fields can be added, removed or changed in a Version. Extends Encoder and Decoder to report which version they are. Updates #68778 Change-Id: Iaffa1828544fb4cbc47a905de853449bc8e5b91f Reviewed-on: https://go-review.googlesource.com/c/go/+/605655 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'src/internal/pkgbits/pkgbits_test.go')
-rw-r--r--src/internal/pkgbits/pkgbits_test.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/internal/pkgbits/pkgbits_test.go b/src/internal/pkgbits/pkgbits_test.go
new file mode 100644
index 0000000000..a5f93c7e8e
--- /dev/null
+++ b/src/internal/pkgbits/pkgbits_test.go
@@ -0,0 +1,67 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits_test
+
+import (
+ "internal/pkgbits"
+ "strings"
+ "testing"
+)
+
+func TestRoundTrip(t *testing.T) {
+ pw := pkgbits.NewPkgEncoder(-1)
+ w := pw.NewEncoder(pkgbits.RelocMeta, pkgbits.SyncPublic)
+ w.Flush()
+
+ var b strings.Builder
+ _ = pw.DumpTo(&b)
+ input := b.String()
+
+ pr := pkgbits.NewPkgDecoder("package_id", input)
+ r := pr.NewDecoder(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
+
+ if r.Version() != w.Version() {
+ t.Errorf("Expected reader version %q to be the writer version %q", r.Version(), w.Version())
+ }
+}
+
+// Type checker to enforce that know V* have the constant values they must have.
+var _ [0]bool = [pkgbits.V0]bool{}
+var _ [1]bool = [pkgbits.V1]bool{}
+
+func TestVersions(t *testing.T) {
+ type vfpair struct {
+ v pkgbits.Version
+ f pkgbits.Field
+ }
+
+ // has field tests
+ for _, c := range []vfpair{
+ {pkgbits.V1, pkgbits.Flags},
+ {pkgbits.V2, pkgbits.Flags},
+ {pkgbits.V0, pkgbits.HasInit},
+ {pkgbits.V1, pkgbits.HasInit},
+ {pkgbits.V0, pkgbits.DerivedFuncInstance},
+ {pkgbits.V1, pkgbits.DerivedFuncInstance},
+ {pkgbits.V2, pkgbits.AliasTypeParamNames},
+ } {
+ if !c.v.Has(c.f) {
+ t.Errorf("Expected version %v to have field %v", c.v, c.f)
+ }
+ }
+
+ // does not have field tests
+ for _, c := range []vfpair{
+ {pkgbits.V0, pkgbits.Flags},
+ {pkgbits.V2, pkgbits.HasInit},
+ {pkgbits.V2, pkgbits.DerivedFuncInstance},
+ {pkgbits.V0, pkgbits.AliasTypeParamNames},
+ {pkgbits.V1, pkgbits.AliasTypeParamNames},
+ } {
+ if c.v.Has(c.f) {
+ t.Errorf("Expected version %v to not have field %v", c.v, c.f)
+ }
+ }
+}