source: BMXNET_RPMS_dotNET_UTILITIES-BMX/branch/IHS BMX Framework/lib/NUnit/NUnit-2.5.10.11092/samples/vb/money/MoneyBag.vb@ 1146

Last change on this file since 1146 was 1146, checked in by Sam Habiel, 13 years ago

Initial Import of BMX4

File size: 5.0 KB
Line 
1' ****************************************************************
2' This is free software licensed under the NUnit license. You
3' may obtain a copy of the license as well as information regarding
4' copyright ownership at http://nunit.org/?p=license&r=2.4.
5' ****************************************************************
6
7Option Explicit On
8
9Namespace NUnit.Samples
10
11 Public Class MoneyBag
12 Implements IMoney
13
14 Private fmonies As ArrayList = New ArrayList(5)
15
16 Private Sub New()
17
18 End Sub
19
20 Public Sub New(ByVal bag As Money())
21 For Each m As Money In bag
22 If Not m.IsZero Then
23 AppendMoney(m)
24 End If
25 Next
26 End Sub
27
28 Public Sub New(ByVal m1 As Money, ByVal m2 As Money)
29
30 AppendMoney(m1)
31 AppendMoney(m2)
32
33 End Sub
34
35 Public Sub New(ByVal m As Money, ByVal bag As MoneyBag)
36 AppendMoney(m)
37 AppendBag(bag)
38 End Sub
39
40 Public Sub New(ByVal m1 As MoneyBag, ByVal m2 As MoneyBag)
41 AppendBag(m1)
42 AppendBag(m2)
43 End Sub
44
45 Public Function Add(ByVal m As IMoney) As IMoney Implements IMoney.Add
46 Return m.AddMoneyBag(Me)
47 End Function
48
49 Public Function AddMoney(ByVal m As Money) As IMoney Implements IMoney.AddMoney
50 Return New MoneyBag(m, Me).Simplify
51 End Function
52
53 Public Function AddMoneyBag(ByVal s As MoneyBag) As IMoney Implements IMoney.AddMoneyBag
54 Return New MoneyBag(s, Me).Simplify()
55 End Function
56
57 Private Sub AppendBag(ByVal aBag As MoneyBag)
58 For Each m As Money In aBag.fmonies
59 AppendMoney(m)
60 Next
61 End Sub
62
63 Private Sub AppendMoney(ByVal aMoney As Money)
64
65 Dim old As Money = FindMoney(aMoney.Currency)
66 If old Is Nothing Then
67 fmonies.Add(aMoney)
68 Return
69 End If
70 fmonies.Remove(old)
71 Dim sum As IMoney = old.Add(aMoney)
72 If (sum.IsZero) Then
73 Return
74 End If
75 fmonies.Add(sum)
76 End Sub
77
78 Private Function Contains(ByVal aMoney As Money) As Boolean
79 Dim m As Money = FindMoney(aMoney.Currency)
80 Return m.Amount.Equals(aMoney.Amount)
81 End Function
82
83 Public Overloads Overrides Function Equals(ByVal anObject As Object) As Boolean
84 If IsZero Then
85 If TypeOf anObject Is IMoney Then
86 Dim aMoney As IMoney = anObject
87 Return aMoney.IsZero
88 End If
89 End If
90
91 If TypeOf anObject Is MoneyBag Then
92 Dim aMoneyBag As MoneyBag = anObject
93 If Not aMoneyBag.fmonies.Count.Equals(fmonies.Count) Then
94 Return False
95 End If
96
97 For Each m As Money In fmonies
98 If Not aMoneyBag.Contains(m) Then
99 Return False
100 End If
101
102 Return True
103 Next
104 End If
105
106 Return False
107 End Function
108
109 Private Function FindMoney(ByVal currency As String) As Money
110 For Each m As Money In fmonies
111 If m.Currency.Equals(currency) Then
112 Return m
113 End If
114 Next
115
116 Return Nothing
117 End Function
118
119 Public Overrides Function GetHashCode() As Int32
120 Dim hash As Int32 = 0
121 For Each m As Money In fmonies
122 hash += m.GetHashCode()
123 Next
124 Return hash
125 End Function
126
127 Public ReadOnly Property IsZero() As Boolean Implements IMoney.IsZero
128 Get
129 Return fmonies.Count.Equals(0)
130 End Get
131 End Property
132
133 Public Function Multiply(ByVal factor As Integer) As IMoney Implements IMoney.Multiply
134 Dim result As New MoneyBag
135 If Not factor.Equals(0) Then
136 For Each m As Money In fmonies
137 result.AppendMoney(m.Multiply(factor))
138 Next
139 End If
140 Return result
141 End Function
142
143 Public Function Negate() As IMoney Implements IMoney.Negate
144 Dim result As New MoneyBag
145 For Each m As Money In fmonies
146 result.AppendMoney(m.Negate())
147 Next
148 Return result
149 End Function
150
151 Private Function Simplify() As IMoney
152 If fmonies.Count.Equals(1) Then
153 Return fmonies(0)
154 End If
155 Return Me
156 End Function
157
158
159 Public Function Subtract(ByVal m As IMoney) As IMoney Implements IMoney.Subtract
160 Return Add(m.Negate())
161 End Function
162 End Class
163
164End Namespace
Note: See TracBrowser for help on using the repository browser.