Предыдущая серия была тут - 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 в будущем.
ОтветитьУдалитьинтересно интересно ... :)
ОтветитьУдалить