@@ -77,7 +77,7 @@ public void CanRoundtripMiniscript(string miniscript)
7777 [ InlineData ( "older(01)" , false ) ]
7878 [ InlineData ( "after(01)" , false ) ]
7979 [ InlineData ( "multi(01,A,B)" , false ) ]
80- [ InlineData ( "older(0)" , true ) ]
80+ [ InlineData ( "older(0)" , false ) ]
8181 [ InlineData ( "older(1000)" , true ) ]
8282 [ InlineData ( "after(1000)" , true ) ]
8383 public void RejectsNonCanonicalNumbers ( string miniscript , bool expected )
@@ -86,6 +86,57 @@ public void RejectsNonCanonicalNumbers(string miniscript, bool expected)
8686 Assert . Equal ( expected , Miniscript . TryParse ( miniscript , settings , out _ ) ) ;
8787 }
8888
89+ [ Theory ]
90+ [ InlineData ( "older(0)" ) ]
91+ [ InlineData ( "older(2147483648)" ) ]
92+ public void RejectsInvalidOlderSequence ( string miniscript )
93+ {
94+ var settings = new MiniscriptParsingSettings ( Network . RegTest , KeyType . Classic ) ;
95+ Assert . False ( Miniscript . TryParse ( miniscript , settings , out var error , out _ ) ) ;
96+ Assert . IsType < MiniscriptError . LocktimeExpected > ( error ) ;
97+ }
98+
99+ [ Theory ]
100+ [ InlineData ( "older(1)" ) ]
101+ [ InlineData ( "older(65535)" ) ]
102+ [ InlineData ( "older(4194304)" ) ]
103+ [ InlineData ( "older(4259839)" ) ]
104+ [ InlineData ( "older(2147483647)" ) ]
105+ public void AcceptsValidOlderSequence ( string miniscript )
106+ {
107+ var settings = new MiniscriptParsingSettings ( Network . RegTest , KeyType . Classic ) ;
108+ var parsed = Miniscript . Parse ( miniscript , settings ) ;
109+ Assert . Equal ( miniscript , parsed . ToString ( ) ) ;
110+ }
111+
112+ [ Theory ]
113+ [ InlineData ( 0U ) ]
114+ [ InlineData ( 0x80000000U ) ]
115+ public void RejectsInvalidOlderSequenceReplacement ( uint sequence )
116+ {
117+ var settings = new MiniscriptParsingSettings ( Network . RegTest , KeyType . Classic ) { AllowedParameters = ParameterTypeFlags . NamedParameter } ;
118+ var parsed = Miniscript . Parse ( "older(A)" , settings ) ;
119+ var exception = Assert . Throws < MiniscriptReplacementException > ( ( ) => parsed . ReplaceParameters ( new ( )
120+ {
121+ [ "A" ] = new MiniscriptNode . Value . LockTimeValue ( sequence )
122+ } ) ) ;
123+ Assert . IsType < MiniscriptNode . ParameterRequirement . RelativeLocktime > ( exception . Requirement ) ;
124+ }
125+
126+ [ Theory ]
127+ [ InlineData ( 1U ) ]
128+ [ InlineData ( 0x00400000U ) ]
129+ [ InlineData ( 0x7fffffffU ) ]
130+ public void AcceptsValidOlderSequenceReplacement ( uint sequence )
131+ {
132+ var settings = new MiniscriptParsingSettings ( Network . RegTest , KeyType . Classic ) { AllowedParameters = ParameterTypeFlags . NamedParameter } ;
133+ var parsed = Miniscript . Parse ( "older(A)" , settings ) . ReplaceParameters ( new ( )
134+ {
135+ [ "A" ] = new MiniscriptNode . Value . LockTimeValue ( sequence )
136+ } ) ;
137+ Assert . Equal ( $ "older({ sequence } )", parsed . ToString ( ) ) ;
138+ }
139+
89140 [ Theory ]
90141 [ InlineData ( "thresh(0)" , KeyType . Classic ) ]
91142 [ InlineData ( "multi(0)" , KeyType . Classic ) ]
0 commit comments