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