@@ -22,8 +22,10 @@ import (
2222 "encoding/binary"
2323 "fmt"
2424 "math"
25+ "testing"
2526
2627 "github.com/fxamacker/cbor/v2"
28+ "github.com/stretchr/testify/require"
2729)
2830
2931// This file contains value implementations for testing purposes
@@ -37,6 +39,64 @@ const (
3739 cborTagHashableMap = 166
3840)
3941
42+ func TestIsCBORTagNumberRangeAvailable (t * testing.T ) {
43+ t .Run ("error" , func (t * testing.T ) {
44+ _ , err := IsCBORTagNumberRangeAvailable (maxInternalCBORTagNumber , minInternalCBORTagNumber )
45+ var userError * UserError
46+ require .ErrorAs (t , err , & userError )
47+ })
48+
49+ t .Run ("identical" , func (t * testing.T ) {
50+ available , err := IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber , maxInternalCBORTagNumber )
51+ require .NoError (t , err )
52+ require .False (t , available )
53+ })
54+
55+ t .Run ("subrange" , func (t * testing.T ) {
56+ available , err := IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber , maxInternalCBORTagNumber - 1 )
57+ require .NoError (t , err )
58+ require .False (t , available )
59+
60+ available , err = IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber + 1 , maxInternalCBORTagNumber )
61+ require .NoError (t , err )
62+ require .False (t , available )
63+ })
64+
65+ t .Run ("partial overlap" , func (t * testing.T ) {
66+ available , err := IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber - 1 , maxInternalCBORTagNumber - 1 )
67+ require .NoError (t , err )
68+ require .False (t , available )
69+
70+ available , err = IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber + 1 , maxInternalCBORTagNumber + 1 )
71+ require .NoError (t , err )
72+ require .False (t , available )
73+ })
74+
75+ t .Run ("non-overlap" , func (t * testing.T ) {
76+ available , err := IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber - 10 , minInternalCBORTagNumber - 1 )
77+ require .NoError (t , err )
78+ require .True (t , available )
79+
80+ available , err = IsCBORTagNumberRangeAvailable (minInternalCBORTagNumber - 1 , minInternalCBORTagNumber - 1 )
81+ require .NoError (t , err )
82+ require .True (t , available )
83+
84+ available , err = IsCBORTagNumberRangeAvailable (maxInternalCBORTagNumber + 1 , maxInternalCBORTagNumber + 10 )
85+ require .NoError (t , err )
86+ require .True (t , available )
87+
88+ available , err = IsCBORTagNumberRangeAvailable (maxInternalCBORTagNumber + 10 , maxInternalCBORTagNumber + 10 )
89+ require .NoError (t , err )
90+ require .True (t , available )
91+ })
92+ }
93+
94+ func TestReservedCBORTagNumberRange (t * testing.T ) {
95+ minTagNum , maxTagNum := ReservedCBORTagNumberRange ()
96+ require .Equal (t , uint64 (minInternalCBORTagNumber ), minTagNum )
97+ require .Equal (t , uint64 (maxInternalCBORTagNumber ), maxTagNum )
98+ }
99+
40100type HashableValue interface {
41101 Value
42102 HashInput (scratch []byte ) ([]byte , error )
0 commit comments