1+ using System . Numerics . Tensors ;
2+
3+ namespace NetFabric . Numerics . Tensors . UnitTests ;
4+
5+ public class SumCheckedTests
6+ {
7+ public static TheoryData < int [ ] > SumCheckedOverflowData
8+ => new ( ) {
9+ new [ ] { int . MaxValue , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
10+ new [ ] { 1 , int . MaxValue , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
11+ new [ ] { 1 , 1 , int . MaxValue , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
12+ new [ ] { 1 , 1 , 1 , int . MaxValue , 1 , 1 , 1 , 1 , 1 , 1 , 1 } ,
13+ new [ ] { 1 , 1 , 1 , 1 , int . MaxValue , 1 , 1 , 1 , 1 , 1 , 1 } ,
14+ new [ ] { 1 , 1 , 1 , 1 , 1 , int . MaxValue , 1 , 1 , 1 , 1 , 1 } ,
15+ new [ ] { 1 , 1 , 1 , 1 , 1 , 1 , int . MaxValue , 1 , 1 , 1 , 1 } ,
16+ new [ ] { 1 , 1 , 1 , 1 , 1 , 1 , 1 , int . MaxValue , 1 , 1 , 1 } ,
17+ } ;
18+
19+ [ Theory ]
20+ [ MemberData ( nameof ( SumCheckedOverflowData ) ) ]
21+ public static void SumChecked_With_Overflow_Should_Throw ( int [ ] source )
22+ {
23+ // arrange
24+
25+ // act
26+ void action ( ) => TensorOperations . SumChecked < int > ( source ) ;
27+
28+ // assert
29+ _ = Assert . Throws < OverflowException > ( action ) ;
30+ }
31+
32+ public static TheoryData < int > SumCheckedData
33+ => new ( ) {
34+ { 0 } , { 1 } , { 2 } , { 3 } , { 4 } , { 5 } , { 6 } , { 7 } , { 8 } , { 9 } , { 10 } , { 100 } ,
35+ } ;
36+
37+ static void SumChecked_Should_Succeed < T > ( int count )
38+ where T : struct , INumber < T >
39+ {
40+ // arrange
41+ var source = new T [ count ] ;
42+ var expected = T . Zero ;
43+ var random = new Random ( 42 ) ;
44+ for ( var index = 0 ; index < source . Length ; index ++ )
45+ {
46+ var value = T . CreateChecked ( random . Next ( 10 ) ) ;
47+ source [ index ] = value ;
48+ expected += value ;
49+ }
50+
51+ // act
52+ var result = TensorOperations . SumChecked < T > ( source ) ;
53+
54+ // assert
55+ Assert . Equal ( expected , result ) ;
56+ }
57+
58+ [ Theory ]
59+ [ MemberData ( nameof ( SumCheckedData ) ) ]
60+ public void SumChecked_Short_Should_Succeed ( int count )
61+ => SumChecked_Should_Succeed < short > ( count ) ;
62+
63+ [ Theory ]
64+ [ MemberData ( nameof ( SumCheckedData ) ) ]
65+ public void SumChecked_Int_Should_Succeed ( int count )
66+ => SumChecked_Should_Succeed < int > ( count ) ;
67+
68+ [ Theory ]
69+ [ MemberData ( nameof ( SumCheckedData ) ) ]
70+ public void SumChecked_Long_Should_Succeed ( int count )
71+ => SumChecked_Should_Succeed < long > ( count ) ;
72+
73+ [ Theory ]
74+ [ MemberData ( nameof ( SumCheckedData ) ) ]
75+ public void SumChecked_Half_Should_Succeed ( int count )
76+ => SumChecked_Should_Succeed < Half > ( count ) ;
77+
78+ [ Theory ]
79+ [ MemberData ( nameof ( SumCheckedData ) ) ]
80+ public void SumChecked_Float_Should_Succeed ( int count )
81+ => SumChecked_Should_Succeed < float > ( count ) ;
82+
83+ [ Theory ]
84+ [ MemberData ( nameof ( SumCheckedData ) ) ]
85+ public void SumChecked_Double_Should_Succeed ( int count )
86+ => SumChecked_Should_Succeed < double > ( count ) ;
87+ }
0 commit comments