func TestBitList(t *testing.T) { seg, _ := zboolvec_value_FilledSegment(5, 3) text := CapnpDecodeSegment(seg, "", "aircraftlib/aircraft.capnp", "Z") expectedText := `(boolvec = [true, false, true])` cv.Convey("Given a go-capnproto created List(Bool) Z::boolvec with bool values [true, false, true]", t, func() { cv.Convey("When we decode it with capnp", func() { cv.Convey(fmt.Sprintf("Then we should get the expected text '%s'", expectedText), func() { cv.So(text, cv.ShouldEqual, expectedText) }) cv.Convey("And our data should contain Z_BOOLVEC with contents true, false, true", func() { z := air.ReadRootZ(seg) cv.So(z.Which(), cv.ShouldEqual, air.Z_BOOLVEC) var bitlist = z.Boolvec() cv.So(bitlist.Len(), cv.ShouldEqual, 3) cv.So(bitlist.At(0), cv.ShouldEqual, true) cv.So(bitlist.At(1), cv.ShouldEqual, false) cv.So(bitlist.At(2), cv.ShouldEqual, true) }) }) }) }
func TestWriteBitListTwo64BitWords(t *testing.T) { seg := capn.NewBuffer(nil) z := air.NewRootZ(seg) list := seg.NewBitList(66) list.Set(64, true) list.Set(65, true) z.SetBoolvec(list) buf := bytes.Buffer{} seg.WriteTo(&buf) cv.Convey("Given a go-capnproto created List(Bool) Z::boolvec with bool values [true (+ 64 more times)]", t, func() { cv.Convey("Decoding it with c++ capnp should yield the expected text", func() { cv.So(CapnpDecodeSegment(seg, "", "aircraftlib/aircraft.capnp", "Z"), cv.ShouldEqual, `(boolvec = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true])`) }) }) cv.Convey("And we should be able to read back what we wrote", t, func() { z := air.ReadRootZ(seg) cv.So(z.Which(), cv.ShouldEqual, air.Z_BOOLVEC) var bitlist = z.Boolvec() cv.So(bitlist.Len(), cv.ShouldEqual, 66) for i := 0; i < 64; i++ { cv.So(bitlist.At(i), cv.ShouldEqual, false) } cv.So(bitlist.At(64), cv.ShouldEqual, true) cv.So(bitlist.At(65), cv.ShouldEqual, true) }) }
func TestCreationOfZData(t *testing.T) { const n = 20 seg, _ := zdataFilledSegment(n) text := CapnpDecodeSegment(seg, "", "aircraftlib/aircraft.capnp", "Z") expectedText := `(zdata = (data = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13"))` cv.Convey("Given a go-capnproto created Zdata DATA element with n=20", t, func() { cv.Convey("When we decode it with capnp", func() { cv.Convey(fmt.Sprintf("Then we should get the expected text '%s'", expectedText), func() { cv.So(text, cv.ShouldEqual, expectedText) }) cv.Convey("And our data should contain Z_ZDATA with contents 0,1,2,...,n", func() { z := air.ReadRootZ(seg) cv.So(z.Which(), cv.ShouldEqual, air.Z_ZDATA) var data []byte = z.Zdata().Data() cv.So(len(data), cv.ShouldEqual, n) for i := range data { cv.So(data[i], cv.ShouldEqual, i) } }) }) }) }
func TestWriteBitList0(t *testing.T) { seg, _ := zboolvec_value_FilledSegment(0, 1) cv.Convey("Given a go-capnproto created List(Bool) Z::boolvec with bool values [false]", t, func() { cv.Convey("Decoding it with c++ capnp should yield the expected text", func() { cv.So(CapnpDecodeSegment(seg, "", "aircraftlib/aircraft.capnp", "Z"), cv.ShouldEqual, `(boolvec = [false])`) }) }) cv.Convey("And we should be able to read back what we wrote", t, func() { z := air.ReadRootZ(seg) cv.So(z.Which(), cv.ShouldEqual, air.Z_BOOLVEC) var bitlist = z.Boolvec() cv.So(bitlist.Len(), cv.ShouldEqual, 1) cv.So(bitlist.At(0), cv.ShouldEqual, false) }) }
func TestReadFromStream(t *testing.T) { const n = 10 r := zdateReader(n, false) s, err := capn.ReadFromStream(r, nil) if err != nil { t.Fatalf("ReadFromStream: %v", err) } z := air.ReadRootZ(s) if z.Which() != air.Z_ZDATEVEC { panic("expected Z_ZDATEVEC in root Z of segment") } zdatelist := z.Zdatevec() if capn.JSON_enabled { for i := 0; i < n; i++ { zdate := zdatelist.At(i) js, err := zdate.MarshalJSON() if err != nil { t.Fatalf("MarshalJSON: %v", err) } t.Logf("%s", string(js)) } } }