@@ -247,12 +247,13 @@ struct SemVer
247247
248248
249249private alias cr = ComparisonResult;
250- enum ComparisonTypes : ComparisonResult[3 ]
250+ enum ComparisonTypes : ComparisonResult[3 ]
251251{
252252 // / Implementation when directly specified version, or `=` is used.
253253 mustBeEqual = [cr.equal, cr.equal, cr.equal],
254254 // / Implementation when using `~`
255255 greaterPatchesOnly = [cr.equal, cr.equal, cr.gtEqual],
256+ greaterMinors = [cr.equal, cr.gtEqual, cr.any],
256257 // / Implementation when using `*`
257258 any = [cr.any, cr.any, cr.any],
258259 // /Implementation when using '>='
@@ -286,9 +287,9 @@ private bool parseOperator(ref SemVer sv, string op, size_t partsLength) @nogc n
286287 case " ^" : sv.comparison = [equal, atOnce, gtEqual]; break ;
287288 case " ~" , " ~>" :
288289 if (partsLength <= 2 )
289- sv.comparison = [equal, atOnce, gtEqual] ;
290+ sv.comparison = ComparisonTypes.greaterMinors ;
290291 else
291- sv.comparison = [equal, equal, gtEqual];
292+ sv.comparison = ComparisonTypes.greaterPatchesOnly;
292293 break ;
293294 case " >" : sv.comparison = [atOnce, greaterThan, greaterThan]; break ;
294295 case " >=" : sv.comparison = [atOnce, gtEqual, gtEqual]; break ;
@@ -366,6 +367,15 @@ unittest
366367 // assert(SemVer("~5").satisfies("5.0.0"));
367368}
368369
370+ @(" Compare using ~>" )
371+ unittest
372+ {
373+ SemVer matchMinor = SemVer(" ~>12.1" );
374+ assert (! SemVer(" 12.0.0" ).satisfies(matchMinor));
375+ assert (SemVer(" 12.1.0" ).satisfies(matchMinor));
376+ assert (! SemVer(" 13.1.0" ).satisfies(matchMinor));
377+ }
378+
369379@(" Compare Using Metadata" )
370380unittest
371381{
0 commit comments