@@ -56,18 +56,42 @@ describe("MassBalanceError", () => {
5656 N2 : 3 ,
5757 } ;
5858
59+ const singlePhase = ( concentrations : Record < string , number > ) => [
60+ { kind : "co2-rich" as const , fraction : 1 , concentrations } ,
61+ ] ;
62+
5963 it ( "error is 0 when the numbers are the same" , ( ) => {
60- expect ( getMassBalanceError ( concs , concs ) . error ) . toBe ( 0 ) ;
64+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( concs ) ) . error ) . toBe ( 0 ) ;
6165 } ) ;
6266
6367 it ( "error is small when difference is small" , ( ) => {
6468 const final = Object . fromEntries ( Object . entries ( concs ) . map ( ( [ subst , amount ] ) => [ subst , amount + 1e-3 ] ) ) ;
6569
66- expect ( getMassBalanceError ( concs , final ) . error ) . toBeLessThan ( 0.01 ) ;
70+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( final ) ) . error ) . toBeLessThan ( 0.01 ) ;
6771 } ) ;
6872
6973 it ( "error is large when order of magnitude difference is large" , ( ) => {
70- expect ( getMassBalanceError ( concs , { ...concs , NO2 : concs . NO2 * 2 } ) . error ) . toBeGreaterThan ( 100.0 ) ;
71- expect ( getMassBalanceError ( concs , { ...concs , NO2 : concs . NO2 / 2 } ) . error ) . toBeGreaterThan ( 100.0 ) ;
74+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( { ...concs , NO2 : concs . NO2 * 2 } ) ) . error ) . toBeGreaterThan ( 100.0 ) ;
75+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( { ...concs , NO2 : concs . NO2 / 2 } ) ) . error ) . toBeGreaterThan ( 100.0 ) ;
76+ } ) ;
77+
78+ it ( "error is 0 when mass is conserved across multiple phases" , ( ) => {
79+ const phases = [
80+ { kind : "co2-rich" as const , fraction : 0.6 , concentrations : { H2O : 1 , NO2 : 2 , N2 : 3 } } ,
81+ { kind : "aqueous" as const , fraction : 0.4 , concentrations : { H2O : 1 , NO2 : 2 , N2 : 3 } } ,
82+ ] ;
83+ expect ( getMassBalanceError ( singlePhase ( concs ) , phases ) . error ) . toBeCloseTo ( 0 , 5 ) ;
84+ } ) ;
85+
86+ it ( "error is 0 when both init and final have multiple phases" , ( ) => {
87+ const initPhases = [
88+ { kind : "co2-rich" as const , fraction : 0.8 , concentrations : { H2O : 1 , NO2 : 2 } } ,
89+ { kind : "aqueous" as const , fraction : 0.2 , concentrations : { H2O : 1 , NO2 : 2 } } ,
90+ ] ;
91+ const finalPhases = [
92+ { kind : "co2-rich" as const , fraction : 0.5 , concentrations : { H2O : 1 , NO2 : 2 } } ,
93+ { kind : "aqueous" as const , fraction : 0.5 , concentrations : { H2O : 1 , NO2 : 2 } } ,
94+ ] ;
95+ expect ( getMassBalanceError ( initPhases , finalPhases ) . error ) . toBeCloseTo ( 0 , 5 ) ;
7296 } ) ;
7397} ) ;
0 commit comments