* Some fixes on interface use from Dean Zobec

This commit is contained in:
michael 2005-04-12 07:31:34 +00:00
parent e5b08ad325
commit 4dba09f9a0
2 changed files with 22 additions and 19 deletions

View File

@ -178,7 +178,7 @@ end;
function TMoneyBag.Simplify: IMoney; function TMoneyBag.Simplify: IMoney;
begin begin
if FMonies.Count = 1 then if FMonies.Count = 1 then
Result := IInterface(FMonies.items[0]) as IMoney Result := IMoney(FMonies.items[0])
else else
Result := Self; Result := Self;
end; end;
@ -203,7 +203,7 @@ var
i: integer; i: integer;
begin begin
for i := 0 to aBag.FMonies.Count - 1 do for i := 0 to aBag.FMonies.Count - 1 do
appendMoney(IUnknown(aBag.FMonies.Items[i]) as ISingleCurrencyMoney); appendMoney(ISingleCurrencyMoney(aBag.FMonies.Items[i]));
end; end;
procedure TMoneyBag.appendMoney(aMoney: ISingleCurrencyMoney); procedure TMoneyBag.appendMoney(aMoney: ISingleCurrencyMoney);
@ -237,8 +237,8 @@ begin
if factor <> 0 then if factor <> 0 then
for i := 0 to FMonies.Count - 1 do for i := 0 to FMonies.Count - 1 do
begin begin
TMoneyBag(Result._Self).appendMoney((IInterface(FMonies.items[i]) TMoneyBag(Result._Self).appendMoney(ISingleCurrencyMoney(
as ISingleCurrencyMoney).Multiply(factor) as ISingleCurrencyMoney); ISingleCurrencyMoney(FMonies.items[i]).Multiply(factor)));
end; end;
end; end;
@ -249,8 +249,8 @@ begin
Result := TMoneyBag.Create; Result := TMoneyBag.Create;
for i := 0 to FMonies.Count - 1 do for i := 0 to FMonies.Count - 1 do
begin begin
TMoneyBag(Result._Self).appendMoney((IInterface(FMonies.items[i]) TMoneyBag(Result._Self).appendMoney(ISingleCurrencyMoney(
as ISingleCurrencyMoney).negate as ISingleCurrencyMoney); ISingleCurrencyMoney(FMonies.items[i]).negate));
end; end;
end; end;
@ -270,7 +270,7 @@ var
begin begin
Result := '{'; Result := '{';
for i := 0 to FMonies.Count - 1 do for i := 0 to FMonies.Count - 1 do
Result := Result + (IInterface(FMonies.items[i]) as ISingleCurrencyMoney).ToString; Result := Result + ISingleCurrencyMoney(FMonies.items[i]).ToString;
Result := Result + '}'; Result := Result + '}';
end; end;
@ -278,6 +278,7 @@ function TMoneyBag.equals(m: IMoney): boolean;
var var
aMoneyBag: TMoneyBag; aMoneyBag: TMoneyBag;
i: integer; i: integer;
ism: ISingleCurrencyMoney;
begin begin
if m = nil then if m = nil then
begin begin
@ -299,7 +300,8 @@ begin
end; end;
for i := 0 to FMonies.Count - 1 do for i := 0 to FMonies.Count - 1 do
begin begin
if not aMoneyBag.Contains(IInterface(FMonies.items[i]) as ISingleCurrencyMoney) then ism := ISingleCurrencyMoney(FMonies.items[i]);
if not aMoneyBag.Contains(ism) then
begin begin
Result := false; Result := false;
Exit; Exit;
@ -389,15 +391,19 @@ begin
end; end;
function TMoney.equals(m: IMoney): boolean; function TMoney.equals(m: IMoney): boolean;
var
ism: ISingleCurrencyMoney;
begin begin
if Assigned(m) then if Assigned(m) then
begin begin
if isZero then if isZero then
if Assigned(m as IMoney) then Result := m.isZero;
Result := (m as IMoney).isZero;
if m._Self.ClassType = TMoney then if m._Self.ClassType = TMoney then
Result := ((m as ISingleCurrencyMoney).Amount = Amount) and begin
((m as ISingleCurrencyMoney).CurrencyUnit = CurrencyUnit) ism := ISingleCurrencyMoney(m);
Result := (ism.Amount = Amount) and
(ism.CurrencyUnit = CurrencyUnit)
end
else else
Result := false; Result := false;
end end

View File

@ -64,12 +64,7 @@ end;
procedure TMoneyTest.TearDown; procedure TMoneyTest.TearDown;
begin begin
F12CHF := nil;
F14CHF := nil;
F7USD := nil;
F21USD := nil;
FMB1 := nil;
FMB2 := nil;
end; end;
procedure TMoneyTest.testBagCreate; procedure TMoneyTest.testBagCreate;
@ -148,9 +143,11 @@ end;
procedure TMoneyTest.testBagNotEquals; procedure TMoneyTest.testBagNotEquals;
var var
expected: IMoney; expected: IMoney;
res: IMoney;
begin begin
expected := TMoneyBag.CreateWith(F12CHF, F7USD); expected := TMoneyBag.CreateWith(F12CHF, F7USD);
AssertFalse(expected.equals(TMoney.Create(12, 'CAD').add(F7USD))); res := TMoney.Create(12, 'CAD').add(F7USD);
AssertFalse(expected.equals(res));
end; end;
procedure TMoneyTest.testMoneyBagEquals; procedure TMoneyTest.testMoneyBagEquals;