package comm import ( "reflect" "testing" ) // 扣费明细存进会议记录 computedevices 列(code:n,code:n),转写失败时按它原路退回。 // code 可能是带冒号的 MAC,必须按最后一个冒号切。 func TestDeviceChargesRoundTrip(t *testing.T) { in := []DeviceCharge{ {Code: "F0:A9:12:34:56:78", N: 30}, {Code: "B0220000000000AB", N: 5}, } s := EncodeDeviceCharges(in) if s != "F0:A9:12:34:56:78:30,B0220000000000AB:5" { t.Fatalf("编码结果 = %q", s) } if got := DecodeDeviceCharges(s); !reflect.DeepEqual(got, in) { t.Fatalf("解码结果 = %+v, want %+v", got, in) } // 空码、非正数不进明细;脏数据解析时跳过,不能退出负数 if got := EncodeDeviceCharges([]DeviceCharge{{Code: "", N: 3}, {Code: "X", N: 0}}); got != "" { t.Fatalf("空明细应编码为空串,实际 %q", got) } if got := DecodeDeviceCharges("abc,:5,X:-3,Y:notnum,Z:7"); !reflect.DeepEqual(got, []DeviceCharge{{Code: "Z", N: 7}}) { t.Fatalf("脏数据解析 = %+v", got) } if got := DecodeDeviceCharges(""); len(got) != 0 { t.Fatalf("空串应解析为空,实际 %+v", got) } }