mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-15 12:50:02 +01:00
* Some fixes on interface use from Dean Zobec
This commit is contained in:
parent
e5b08ad325
commit
4dba09f9a0
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user