package bytepacket import ( "bytes" "testing" ) func TestIntReadWrite(t *testing.T) { p := NewPacket(nil) p.WriteInt8(-8) p.WriteUInt8(8) p.WriteInt16(-16) p.WriteUInt16(16) p.WriteInt32(-32) p.WriteUInt32(32) p.WriteInt64(-64) p.WriteUInt64(64) p.WriteFloat32(1.5) p.WriteFloat64(2.5) r := NewPacket(p.GetData()) if got := r.ReadInt8(); got != -8 { t.Errorf("ReadInt8 = %d, want -8", got) } if got := r.ReadUInt8(); got != 8 { t.Errorf("ReadUInt8 = %d, want 8", got) } if got := r.ReadInt16(); got != -16 { t.Errorf("ReadInt16 = %d, want -16", got) } if got := r.ReadUInt16(); got != 16 { t.Errorf("ReadUInt16 = %d, want 16", got) } if got := r.ReadInt32(); got != -32 { t.Errorf("ReadInt32 = %d, want -32", got) } if got := r.ReadUInt32(); got != 32 { t.Errorf("ReadUInt32 = %d, want 32", got) } if got := r.ReadInt64(); got != -64 { t.Errorf("ReadInt64 = %d, want -64", got) } if got := r.ReadUInt64(); got != 64 { t.Errorf("ReadUInt64 = %d, want 64", got) } if got := r.ReadFloat32(); got != 1.5 { t.Errorf("ReadFloat32 = %v, want 1.5", got) } if got := r.ReadFloat64(); got != 2.5 { t.Errorf("ReadFloat64 = %v, want 2.5", got) } } func TestStringReadWrite(t *testing.T) { p := NewPacket(nil) if err := p.WriteString("hello"); err != nil { t.Fatalf("WriteString: %v", err) } if err := p.WriteStringGbk("中文GBK"); err != nil { t.Fatalf("WriteStringGbk: %v", err) } r := NewPacket(p.GetData()) s, err := r.ReadString() if err != nil || s != "hello" { t.Errorf("ReadString = %q, %v, want hello", s, err) } g, err := r.ReadStringGbk() if err != nil || g != "中文GBK" { t.Errorf("ReadStringGbk = %q, %v, want 中文GBK", g, err) } } func TestBytesReadWrite(t *testing.T) { p := NewPacket(nil) want := []byte{1, 2, 3, 0xFF} if err := p.WriteBytes(want); err != nil { t.Fatalf("WriteBytes: %v", err) } got := NewPacket(p.GetData()).ReadBytes() if !bytes.Equal(got, want) { t.Errorf("ReadBytes = %v, want %v", got, want) } } func TestSetDataGetData(t *testing.T) { p := NewPacket(nil) p.SetData([]byte{9, 9}) if !bytes.Equal(p.GetData(), []byte{9, 9}) { t.Errorf("GetData = %v, want [9 9]", p.GetData()) } } func TestGbkUtf8Convert(t *testing.T) { src := []byte("编码转换") gbk, err := Utf8ToGbk(src) if err != nil { t.Fatalf("Utf8ToGbk: %v", err) } utf8Bytes, err := GbkToUtf8(gbk) if err != nil { t.Fatalf("GbkToUtf8: %v", err) } if !bytes.Equal(utf8Bytes, src) { t.Errorf("GBK 往返不一致: %q != %q", utf8Bytes, src) } } func TestReadElangDateTime(t *testing.T) { // 45292.5 天 ≈ 2024-01-01 12:00:00 p := NewPacket(nil) p.WriteFloat64(45292.5) got := NewPacket(p.GetData()).ReadElangDateTime() if got.Format("2006-01-02 15:04:05") != "2024-01-01 12:00:00" { t.Errorf("ReadElangDateTime = %s, want 2024-01-01 12:00:00", got.Format("2006-01-02 15:04:05")) } } func TestReadStringEmpty(t *testing.T) { p := NewPacket(nil) p.WriteInt16(0) s, err := NewPacket(p.GetData()).ReadString() if err != nil || s != "" { t.Errorf("ReadString 空串 = %q, %v", s, err) } }