@@ -309,6 +309,7 @@ ResultTypes.Number or ResultTypes.ComplexNumber or ResultTypes.Vector
309
309
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
310
310
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
311
311
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
312
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
312
313
_ => ResultTypes . NumbersOrComplexOrVector . ThrowFor ( result ) ,
313
314
} ;
314
315
}
@@ -345,6 +346,11 @@ public virtual ResultTypes Analyze(Add exp)
345
346
( ResultTypes . TemperatureNumber , ResultTypes . TemperatureNumber )
346
347
=> ResultTypes . TemperatureNumber ,
347
348
349
+ ( ResultTypes . Number , ResultTypes . MassNumber ) or
350
+ ( ResultTypes . MassNumber , ResultTypes . Number ) or
351
+ ( ResultTypes . MassNumber , ResultTypes . MassNumber )
352
+ => ResultTypes . MassNumber ,
353
+
348
354
( ResultTypes . Number , ResultTypes . ComplexNumber ) or
349
355
( ResultTypes . ComplexNumber , ResultTypes . Number ) or
350
356
( ResultTypes . ComplexNumber , ResultTypes . ComplexNumber )
@@ -388,6 +394,7 @@ public virtual ResultTypes Analyze(Ceil exp)
388
394
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
389
395
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
390
396
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
397
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
391
398
_ => ResultTypes . Numbers . ThrowFor ( result ) ,
392
399
} ;
393
400
}
@@ -444,6 +451,9 @@ public virtual ResultTypes Analyze(Div exp)
444
451
( ResultTypes . TemperatureNumber , ResultTypes . Number )
445
452
=> ResultTypes . TemperatureNumber ,
446
453
454
+ ( ResultTypes . MassNumber , ResultTypes . Number )
455
+ => ResultTypes . MassNumber ,
456
+
447
457
( ResultTypes . Number , ResultTypes . ComplexNumber ) or
448
458
( ResultTypes . ComplexNumber , ResultTypes . Number ) or
449
459
( ResultTypes . ComplexNumber , ResultTypes . ComplexNumber )
@@ -504,6 +514,7 @@ public virtual ResultTypes Analyze(Floor exp)
504
514
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
505
515
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
506
516
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
517
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
507
518
_ => ResultTypes . NumberOrAngle . ThrowFor ( result ) ,
508
519
} ;
509
520
}
@@ -523,6 +534,7 @@ public virtual ResultTypes Analyze(Trunc exp)
523
534
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
524
535
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
525
536
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
537
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
526
538
_ => ResultTypes . NumberOrAngle . ThrowFor ( result ) ,
527
539
} ;
528
540
}
@@ -542,6 +554,7 @@ public virtual ResultTypes Analyze(Frac exp)
542
554
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
543
555
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
544
556
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
557
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
545
558
_ => ResultTypes . NumberOrAngle . ThrowFor ( result ) ,
546
559
} ;
547
560
}
@@ -710,6 +723,10 @@ public virtual ResultTypes Analyze(Mul exp)
710
723
( ResultTypes . TemperatureNumber , ResultTypes . Number )
711
724
=> ResultTypes . TemperatureNumber ,
712
725
726
+ ( ResultTypes . Number , ResultTypes . MassNumber ) or
727
+ ( ResultTypes . MassNumber , ResultTypes . Number )
728
+ => ResultTypes . MassNumber ,
729
+
713
730
( ResultTypes . Number , ResultTypes . ComplexNumber ) or
714
731
( ResultTypes . ComplexNumber , ResultTypes . Number ) or
715
732
( ResultTypes . ComplexNumber , ResultTypes . ComplexNumber )
@@ -759,6 +776,10 @@ public virtual ResultTypes Analyze(Power exp)
759
776
public virtual ResultTypes Analyze ( Temperature exp )
760
777
=> CheckArgument ( exp , ResultTypes . TemperatureNumber ) ;
761
778
779
+ /// <inheritdoc />
780
+ public virtual ResultTypes Analyze ( Mass exp )
781
+ => CheckArgument ( exp , ResultTypes . MassNumber ) ;
782
+
762
783
/// <inheritdoc />
763
784
public virtual ResultTypes Analyze ( ToDegree exp )
764
785
=> AngleConversion ( exp ) ;
@@ -849,15 +870,30 @@ public virtual ResultTypes Analyze(Round exp)
849
870
if ( exp is null )
850
871
ArgNull ( ExceptionArgument . exp ) ;
851
872
852
- var enumerator = exp . Arguments . GetEnumerator ( ) ;
853
- for ( var i = 0 ; enumerator . MoveNext ( ) ; i ++ )
873
+ var number = exp . Arguments [ 0 ] . Analyze ( this ) ;
874
+ var digits = exp . Arguments [ 1 ] ? . Analyze ( this ) ?? ResultTypes . None ;
875
+
876
+ if ( digits is ResultTypes . None or ResultTypes . Undefined or ResultTypes . Number )
854
877
{
855
- var item = enumerator . Current . Analyze ( this ) ;
856
- if ( item != ResultTypes . Undefined && item != ResultTypes . Number )
857
- throw new DifferentParameterTypeMismatchException ( ResultTypes . Number , item , i ) ;
878
+ return number switch
879
+ {
880
+ ResultTypes . Undefined => ResultTypes . Undefined ,
881
+ ResultTypes . Number => ResultTypes . Number ,
882
+ ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
883
+ ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
884
+ ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
885
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
886
+ _ => throw new DifferentParameterTypeMismatchException (
887
+ ResultTypes . Undefined | ResultTypes . Numbers ,
888
+ number ,
889
+ 0 ) ,
890
+ } ;
858
891
}
859
892
860
- return ResultTypes . Number ;
893
+ throw new DifferentParameterTypeMismatchException (
894
+ ResultTypes . None | ResultTypes . Undefined | ResultTypes . Number ,
895
+ digits ,
896
+ 1 ) ;
861
897
}
862
898
863
899
/// <inheritdoc />
@@ -900,6 +936,11 @@ public virtual ResultTypes Analyze(Sub exp)
900
936
( ResultTypes . TemperatureNumber , ResultTypes . TemperatureNumber )
901
937
=> ResultTypes . TemperatureNumber ,
902
938
939
+ ( ResultTypes . Number , ResultTypes . MassNumber ) or
940
+ ( ResultTypes . MassNumber , ResultTypes . Number ) or
941
+ ( ResultTypes . MassNumber , ResultTypes . MassNumber )
942
+ => ResultTypes . MassNumber ,
943
+
903
944
( ResultTypes . Number , ResultTypes . ComplexNumber ) or
904
945
( ResultTypes . ComplexNumber , ResultTypes . Number ) or
905
946
( ResultTypes . ComplexNumber , ResultTypes . ComplexNumber )
@@ -939,6 +980,7 @@ public virtual ResultTypes Analyze(UnaryMinus exp)
939
980
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
940
981
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
941
982
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
983
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
942
984
ResultTypes . ComplexNumber => ResultTypes . ComplexNumber ,
943
985
_ => ResultTypes . NumberOrComplex . ThrowFor ( result ) ,
944
986
} ;
@@ -971,10 +1013,12 @@ public virtual ResultTypes Analyze(Sign exp)
971
1013
return result switch
972
1014
{
973
1015
ResultTypes . Undefined => ResultTypes . Undefined ,
974
- ResultTypes . Number => ResultTypes . Number ,
975
- ResultTypes . AngleNumber => ResultTypes . Number ,
976
- ResultTypes . PowerNumber => ResultTypes . Number ,
977
- ResultTypes . TemperatureNumber => ResultTypes . Number ,
1016
+ ResultTypes . Number or
1017
+ ResultTypes . AngleNumber or
1018
+ ResultTypes . PowerNumber or
1019
+ ResultTypes . TemperatureNumber or
1020
+ ResultTypes . MassNumber => ResultTypes . Number ,
1021
+
978
1022
_ => ResultTypes . Numbers . ThrowFor ( result ) ,
979
1023
} ;
980
1024
}
@@ -1010,6 +1054,7 @@ ResultTypes.Undefined or
1010
1054
ResultTypes . AngleNumber => ResultTypes . AngleNumber ,
1011
1055
ResultTypes . PowerNumber => ResultTypes . PowerNumber ,
1012
1056
ResultTypes . TemperatureNumber => ResultTypes . TemperatureNumber ,
1057
+ ResultTypes . MassNumber => ResultTypes . MassNumber ,
1013
1058
1014
1059
_ => ResultTypes . Numbers . ThrowFor ( valueResult ) ,
1015
1060
} ;
0 commit comments