11import assert from 'assert' ;
22
33import {
4- ComparableOutput ,
5- equalOutput ,
4+ ActualOutput ,
5+ ExpectedOutput ,
6+ matchingOutput ,
67 outputDifference ,
78 outputDifferencesWithExpected ,
89} from '../../../src/transaction/descriptor/outputDifference' ;
910
1011describe ( 'outputDifference' , function ( ) {
11- function output ( script : string , value : bigint | number ) {
12+ function output ( script : string , value : bigint | number ) : ActualOutput ;
13+ function output ( script : string , value : 'max' ) : ExpectedOutput ;
14+ function output ( script : string , value : bigint | number | 'max' ) : ActualOutput | ExpectedOutput {
1215 const scriptBuffer = Buffer . from ( script , 'hex' ) ;
1316 if ( scriptBuffer . toString ( 'hex' ) !== script ) {
1417 throw new Error ( 'invalid script' ) ;
1518 }
1619 return {
1720 script : Buffer . from ( script , 'hex' ) ,
18- value : BigInt ( value ) ,
21+ value : value === 'max' ? 'max' : BigInt ( value ) ,
1922 } ;
2023 }
2124
2225 const a = output ( 'aa' , 1 ) ;
2326 const a2 = output ( 'aa' , 2 ) ;
24- const b = output ( 'bb' , 2 ) ;
25- const c = output ( 'cc' , 3 ) ;
27+ const aMax = output ( 'aa' , 'max' ) ;
28+ const b = output ( 'bb' , 1 ) ;
29+ const c = output ( 'cc' , 1 ) ;
2630
2731 describe ( 'equalOutput' , function ( ) {
2832 it ( 'has expected result' , function ( ) {
29- assert . deepStrictEqual ( equalOutput ( a , a ) , true ) ;
30- assert . deepStrictEqual ( equalOutput ( a , a2 ) , false ) ;
31- assert . deepStrictEqual ( equalOutput ( a , b ) , false ) ;
33+ assert . deepStrictEqual ( matchingOutput ( a , a ) , true ) ;
34+ assert . deepStrictEqual ( matchingOutput ( a , a2 ) , false ) ;
35+ assert . deepStrictEqual ( matchingOutput ( a , b ) , false ) ;
36+ assert . deepStrictEqual ( matchingOutput ( aMax , b ) , false ) ;
37+
38+ assert . deepStrictEqual ( matchingOutput ( aMax , a ) , true ) ;
39+ assert . deepStrictEqual ( matchingOutput ( a , aMax ) , true ) ;
40+ // this one does not appear in practice but is a valid comparison
41+ assert . deepStrictEqual ( matchingOutput ( aMax , aMax ) , true ) ;
3242 } ) ;
3343 } ) ;
3444
3545 describe ( 'outputDifference' , function ( ) {
36- assert . deepStrictEqual ( outputDifference ( [ ] , [ ] ) , [ ] ) ;
37- assert . deepStrictEqual ( outputDifference ( [ a ] , [ ] ) , [ a ] ) ;
38- assert . deepStrictEqual ( outputDifference ( [ ] , [ a ] ) , [ ] ) ;
39- assert . deepStrictEqual ( outputDifference ( [ a ] , [ a ] ) , [ ] ) ;
40- assert . deepStrictEqual ( outputDifference ( [ a , a ] , [ a ] ) , [ a ] ) ;
41- assert . deepStrictEqual ( outputDifference ( [ a , a , a ] , [ a ] ) , [ a , a ] ) ;
42- assert . deepStrictEqual ( outputDifference ( [ a , b , c ] , [ a , b ] ) , [ c ] ) ;
43- assert . deepStrictEqual ( outputDifference ( [ a , b , c , a ] , [ a , b ] ) , [ c , a ] ) ;
46+ it ( 'has expected result' , function ( ) {
47+ assert . deepStrictEqual ( outputDifference ( [ ] , [ ] ) , [ ] ) ;
48+ assert . deepStrictEqual ( outputDifference ( [ a ] , [ ] ) , [ a ] ) ;
49+ assert . deepStrictEqual ( outputDifference ( [ aMax ] , [ ] ) , [ aMax ] ) ;
50+ assert . deepStrictEqual ( outputDifference ( [ ] , [ a ] ) , [ ] ) ;
51+ assert . deepStrictEqual ( outputDifference ( [ ] , [ aMax ] ) , [ ] ) ;
52+ assert . deepStrictEqual ( outputDifference ( [ a ] , [ a ] ) , [ ] ) ;
53+ assert . deepStrictEqual ( outputDifference ( [ a ] , [ aMax ] ) , [ ] ) ;
54+ assert . deepStrictEqual ( outputDifference ( [ aMax ] , [ a ] ) , [ ] ) ;
55+ assert . deepStrictEqual ( outputDifference ( [ a , a ] , [ a ] ) , [ a ] ) ;
56+ assert . deepStrictEqual ( outputDifference ( [ a , a ] , [ aMax ] ) , [ a ] ) ;
57+ assert . deepStrictEqual ( outputDifference ( [ a , a , a ] , [ a ] ) , [ a , a ] ) ;
58+ assert . deepStrictEqual ( outputDifference ( [ a , b , c ] , [ a , b ] ) , [ c ] ) ;
59+ assert . deepStrictEqual ( outputDifference ( [ a , b , c ] , [ aMax , b ] ) , [ c ] ) ;
60+ assert . deepStrictEqual ( outputDifference ( [ a , b , c , a ] , [ a , b ] ) , [ c , a ] ) ;
4461
45- assert . deepStrictEqual ( outputDifference ( [ a ] , [ a2 ] ) , [ a ] ) ;
46- assert . deepStrictEqual ( outputDifference ( [ a2 ] , [ a ] ) , [ a2 ] ) ;
62+ assert . deepStrictEqual ( outputDifference ( [ a ] , [ a2 ] ) , [ a ] ) ;
63+ assert . deepStrictEqual ( outputDifference ( [ a2 ] , [ a ] ) , [ a2 ] ) ;
64+ } ) ;
4765 } ) ;
4866
4967 describe ( 'outputDifferencesWithExpected' , function ( ) {
5068 function test (
51- outputs : ComparableOutput [ ] ,
52- recipients : ComparableOutput [ ] ,
69+ outputs : ActualOutput [ ] ,
70+ recipients : ExpectedOutput [ ] ,
5371 expected : {
54- missing : ComparableOutput [ ] ;
55- explicit : ComparableOutput [ ] ;
56- implicit : ComparableOutput [ ] ;
72+ missing : ExpectedOutput [ ] ;
73+ explicit : ActualOutput [ ] ;
74+ implicit : ActualOutput [ ] ;
5775 }
5876 ) {
5977 const result = outputDifferencesWithExpected ( outputs , recipients ) ;
@@ -64,12 +82,14 @@ describe('outputDifference', function () {
6482 } ) ;
6583 }
6684
67- test ( [ a ] , [ ] , { missing : [ ] , explicit : [ ] , implicit : [ a ] } ) ;
68- test ( [ ] , [ a ] , { missing : [ a ] , explicit : [ ] , implicit : [ ] } ) ;
69- test ( [ a ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ ] } ) ;
70- test ( [ a ] , [ a2 ] , { missing : [ a2 ] , explicit : [ ] , implicit : [ a ] } ) ;
71- test ( [ b ] , [ a ] , { missing : [ a ] , explicit : [ ] , implicit : [ b ] } ) ;
72- test ( [ a , a ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ a ] } ) ;
73- test ( [ a , b ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ b ] } ) ;
85+ it ( 'has expected result' , function ( ) {
86+ test ( [ a ] , [ ] , { missing : [ ] , explicit : [ ] , implicit : [ a ] } ) ;
87+ test ( [ ] , [ a ] , { missing : [ a ] , explicit : [ ] , implicit : [ ] } ) ;
88+ test ( [ a ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ ] } ) ;
89+ test ( [ a ] , [ a2 ] , { missing : [ a2 ] , explicit : [ ] , implicit : [ a ] } ) ;
90+ test ( [ b ] , [ a ] , { missing : [ a ] , explicit : [ ] , implicit : [ b ] } ) ;
91+ test ( [ a , a ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ a ] } ) ;
92+ test ( [ a , b ] , [ a ] , { missing : [ ] , explicit : [ a ] , implicit : [ b ] } ) ;
93+ } ) ;
7494 } ) ;
7595} ) ;
0 commit comments