Предыдущая серия была тут - http://18delphi.blogspot.com/2013/07/blog-post_8789.html
Теперь обобщим приведённые там тесты.
Как обычно.
Модель:
Тут добавился "примесный тест" - ListTest, а все остальные тесты от него - наследуются и определяют тип конкретного списка, который надо тестировать. Этот тест нам сильно пригодится, когда мы будем расширять функциональность контейнеров. Вместе с функциональностью абстрактных контейнеров будем расширять и функциональность примесного теста. Таким образом - КОНКРЕТНЫЕ тесты - "сами" будут расширяться.
Код:
ListTest.imp.pas:
IntegerListTest.pas:
ByteListTest.pas:
Int64ListTest.pas:
Код тут - http://sourceforge.net/p/rumtmarc/code-0/19/tree/trunk/Blogger/SandBox и http://sourceforge.net/p/rumtmarc/code-0/19/tree/trunk/Blogger/SandBoxTest
Теперь обобщим приведённые там тесты.
Как обычно.
Модель:
Тут добавился "примесный тест" - ListTest, а все остальные тесты от него - наследуются и определяют тип конкретного списка, который надо тестировать. Этот тест нам сильно пригодится, когда мы будем расширять функциональность контейнеров. Вместе с функциональностью абстрактных контейнеров будем расширять и функциональность примесного теста. Таким образом - КОНКРЕТНЫЕ тесты - "сами" будут расширяться.
Код:
ListTest.imp.pas:
{$IfNDef ListTest_imp}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Библиотека "SandBoxTest"
// Модуль: "ListTest.imp.pas"
// Родные Delphi интерфейсы (.pas)
// Generated from UML model, root element: TestCaseMixIn::Class Shared Delphi Sand Box::SandBoxTest::FinalContainersTests::ListTest
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{$Define ListTest_imp}
{$If defined(nsTest)}
_ListTest_ = class(TTestCase)
published
// published methods
procedure DoIt;
procedure TestTwoLists;
end;//_ListTest_
{$IfEnd} //nsTest
{$Else ListTest_imp}
{$If defined(nsTest)}
// start class _ListTest_
procedure _ListTest_.DoIt;
//#UC START# *51DEB319037C_51E03FC80111_var*
const
cCount = 1000;
var
l_List : _ListType_;
l_Count : IndexType;
l_Index : IndexType;
//#UC END# *51DEB319037C_51E03FC80111_var*
begin
//#UC START# *51DEB319037C_51E03FC80111_impl*
l_List := _ListType_.Create;
try
l_List.Count := cCount;
Check(l_List.Count = cCount);
Check(l_List.Capacity >= cCount);
for l_Index := 0 to l_List.Count - 1 do
Check(l_List[l_Index] = 0);
l_Count := Random(cCount);
l_List.Count := l_Count;
Check(l_List.Count = l_Count, Format('Выделяли %d элементов. Count = %d', [l_Count, l_List.Count]));
Check(l_List.Capacity >= l_Count, Format('Выделяли %d элементов. Capacity = %d', [l_Count, l_List.Capacity]));
for l_Index := 0 to l_List.Count - 1 do
Check(l_List[l_Index] = 0);
finally
FreeAndNil(l_List);
end;//try..finally
//#UC END# *51DEB319037C_51E03FC80111_impl*
end;//_ListTest_.DoIt
procedure _ListTest_.TestTwoLists;
//#UC START# *51DED6FC03C1_51E03FC80111_var*
const
cCount = 1000;
var
l_A : _ListType_;
l_B : _ListType_;
l_Index : IndexType;
l_Value : _ItemType_;
l_Max : _ItemType_;
//#UC END# *51DED6FC03C1_51E03FC80111_var*
begin
//#UC START# *51DED6FC03C1_51E03FC80111_impl*
l_A := _ListType_.Create;
try
l_B := _ListType_.Create;
try
l_A.Count := cCount;
for l_Index := 0 to l_A.Count - 1 do
begin
l_Value := Random(1000);
l_A[l_Index] := l_Value;
Check(l_A[l_Index] = l_Value);
end;//for l_Index
l_B.Count := l_A.Count;
for l_Index := 0 to l_A.Count - 1 do
begin
l_B[l_Index] := l_A[l_Index];
end;//for l_Index
for l_Index := 0 to l_A.Count - 1 do
begin
Check(l_B[l_Index] = l_A[l_Index]);
end;//for l_Index
finally
FreeAndNil(l_B);
end;//try..finally
finally
FreeAndNil(l_A);
end;//try..finally
//#UC END# *51DED6FC03C1_51E03FC80111_impl*
end;//_ListTest_.TestTwoLists
{$IfEnd} //nsTest
{$EndIf ListTest_imp}
IntegerListTest.pas:
unit IntegerListTest;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Библиотека "SandBoxTest"
// Модуль: "IntegerListTest.pas"
// Родные Delphi интерфейсы (.pas)
// Generated from UML model, root element: TestCase::Class Shared Delphi Sand Box::SandBoxTest::FinalContainersTests::IntegerListTest
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{$Include .\sbtDefine.inc}
interface
{$If defined(nsTest)}
uses
TestFrameWork,
IntegerList
;
{$IfEnd} //nsTest
{$If defined(nsTest)}
type
_ListType_ = TIntegerList;
{$Include .\ListTest.imp.pas}
TIntegerListTest = class(_ListTest_)
end;//TIntegerListTest
{$IfEnd} //nsTest
implementation
{$If defined(nsTest)}
uses
SysUtils
;
{$IfEnd} //nsTest
{$If defined(nsTest)}
type _Instance_R_ = TIntegerListTest;
type _ListTest_R_ = TIntegerListTest;
{$Include .\ListTest.imp.pas}
{$IfEnd} //nsTest
initialization
TestFramework.RegisterTest(TIntegerListTest.Suite);
end.
ByteListTest.pas:
unit ByteList;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Библиотека "SandBox"
// Модуль: "ByteList.pas"
// Родные Delphi интерфейсы (.pas)
// Generated from UML model, root element: SimpleClass::Class Shared Delphi Sand Box::SandBox::FinalContainers::TByteList
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{$Include .\sbDefine.inc}
interface
uses
Refcounted,
Classes,
l3PtrLoc
;
type
_ItemType_ = Byte;
_AtomicList_Parent_ = TRefcounted;
{$Include .\AtomicList.imp.pas}
TByteList = class(_AtomicList_)
end;//TByteList
implementation
uses
RTLConsts,
l3MemorySizeUtils
;
type _Instance_R_ = TByteList;
type _AtomicList_R_ = TByteList;
{$Include .\AtomicList.imp.pas}
end.
Int64ListTest.pas:
unit Int64ListTest;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Библиотека "SandBoxTest"
// Модуль: "Int64ListTest.pas"
// Родные Delphi интерфейсы (.pas)
// Generated from UML model, root element: TestCase::Class Shared Delphi Sand Box::SandBoxTest::FinalContainersTests::Int64ListTest
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{$Include .\sbtDefine.inc}
interface
{$If defined(nsTest)}
uses
TestFrameWork,
Int64List
;
{$IfEnd} //nsTest
{$If defined(nsTest)}
type
_ListType_ = TInt64List;
{$Include .\ListTest.imp.pas}
TInt64ListTest = class(_ListTest_)
end;//TInt64ListTest
{$IfEnd} //nsTest
implementation
{$If defined(nsTest)}
uses
SysUtils
;
{$IfEnd} //nsTest
{$If defined(nsTest)}
type _Instance_R_ = TInt64ListTest;
type _ListTest_R_ = TInt64ListTest;
{$Include .\ListTest.imp.pas}
{$IfEnd} //nsTest
initialization
TestFramework.RegisterTest(TInt64ListTest.Suite);
end.
Код тут - http://sourceforge.net/p/rumtmarc/code-0/19/tree/trunk/Blogger/SandBox и http://sourceforge.net/p/rumtmarc/code-0/19/tree/trunk/Blogger/SandBoxTest

Неужто никому ПРАВДА неинтересно?
ОтветитьУдалитьЭто кстати уже не ListTest, а AtomicListTest. А будет ещё RecordListTest в будущем.
ОтветитьУдалитьинтересно интересно ... :)
ОтветитьУдалить