// Copyright 2023 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 inlheur import "testing" func fpeq(fp1, fp2 FuncProps) bool { if fp1.Flags != fp2.Flags { return false } if len(fp1.ParamFlags) != len(fp2.ParamFlags) { return false } for i := range fp1.ParamFlags { if fp1.ParamFlags[i] != fp2.ParamFlags[i] { return false } } if len(fp1.ResultFlags) != len(fp2.ResultFlags) { return false } for i := range fp1.ResultFlags { if fp1.ResultFlags[i] != fp2.ResultFlags[i] { return false } } return true } func TestSerDeser(t *testing.T) { testcases := []FuncProps{ FuncProps{}, FuncProps{ Flags: 0xfffff, }, FuncProps{ Flags: 1, ResultFlags: []ResultPropBits{ResultAlwaysSameConstant}, }, FuncProps{ Flags: 1, ParamFlags: []ParamPropBits{0x99, 0xaa, 0xfffff}, ResultFlags: []ResultPropBits{0xfeedface}, }, } for k, tc := range testcases { s := tc.SerializeToString() fp := DeserializeFromString(s) got := fp.String() want := tc.String() if !fpeq(*fp, tc) { t.Errorf("eq check failed for test %d: got:\n%s\nwant:\n%s\n", k, got, want) } } var nilt *FuncProps ns := nilt.SerializeToString() nfp := DeserializeFromString(ns) if len(ns) != 0 || nfp != nil { t.Errorf("nil serialize/deserialize failed") } }