作者Zeng YueTian,轉載請注明出處http://blog.csdn.net/yuetiantian/
相對于其他語言而言,4Test提供了兩種動態數組,其一是Array,另一個是List。但是它們的使用方法和其他常見的語言略有不同,所以有必要專門介紹一下它們。
Array關鍵字用來聲明數組變量,它的語法最主要的有兩種:
(1)Array [維數1][維數2]… Of 數據類型 數組名
(2)數據類型 數組名[維數1][維數2]…
注意,在array中,所有的數據類型必須一致。你必須在定義該數組的時候指定它的類型和維數。
Array由層次型的數據組成,每一層被稱為一維。每層都包含指定數目的元素或者子數組。最下面一層的葉子節點包含著真正的元素,其他的層包含的是子數組?紤]下面的數組定義:
ARRAY[2][3][4] OF INTEGER MyArray
該數組在第一層有兩個子數組,在第二層上對于每個第一層的子數組都有3個子數組,對于每個第二層的子數組都有4個元素。所以,第一層有2個子數組,第二層有6個子數組,整個數組包含24個元素。
Array數組的的大小必須在1到2147483647 (MAXINT)之間。并且請注意array2[2,10,5]和array2[2][10][5]代表的是同一個元素。
你可以使用LIST的構造符號{},當你使用大括號來聲明一個array數組對象的時候,4Test隱式地將產生的LIST轉換為一個array。你不可以使用大括號{}來修改一個已經存在的array,你只能用大括號{}來初始化一個array。
下面是一個使用array的例子:
ARRAY[50] OF STRING array1
ARRAY[20][20][20] OF INTEGER array2
testcase array_example ()
// 第一個array中的第39個元素
array1[39] = "alphabet soup"
// 下面兩種方法存取的是同一個元素
array2[2, 4, 2] = 5
Print (array2[2][4][2]) //prints 5
// 初始化一個數組,從索引1開始,并且覆蓋曾經有的值
array1 = {...}
"foo"
"bar"
// 另一種可選的初始化方法
array1 = {"foo", "bar"}
在知道了array的基本概念之后,讓我們來看看常用的array數組函數。
1. ArrayFind()
該函數用來查找數組中某個元素的位置。
注意:silktest中數組的下標是從1開始的,這點和許多類C的語言是不同的。
該函數的原型為iPos = ArrayFind (aArray, aElem [, iMaxIndex])
其中iPost是返回的元素位置,數據類型為Integer。aArray是想要查找的數組名,數據類型是Array of AnyType。aElem是想要查找的元素,數據類型是AnyType。iMaxIndex為可選參數,表示最大搜尋范圍,數據類型是integer。
該函數在找到要找的數組元素時,返回其索引。如果指定了iMaxIndex,ArrayFind將只查找到第一個iMaxIndex,否則將查找整個數組。如果沒有找到想要查找的元素,該函數將返回0.當對多維數組進行查找時,需要指定想要查找的子數組。下面是一個例子:
INTEGER aiTempPerDay[5][4]
testcase arrayfind_example ()
aiTempPerDay = {...}
{10, 12, 8, 17}
{-1, 0, 17, -9}
{14, 1, 1, 0}
{75, 32, 18, 103}
{9, -7, -2, 3}
Print (ArrayFind (aiTempPerDay[1], 8)) //打印 3
Print (ArrayFind (aiTempPerDay[5], -7)) // 打印2
Print (ArrayFind (aiTempPerDay[4], 103, 3)) // 打印0
Print (ArrayFind (aiTempPerDay[2], 20)) // 打印0
Print (ArrayFind (aiTempPerDay, {-1, 0, 17, -9})) // 打印2
2.ArraySize()
該函數返回一個數組里面的元素個數。其原型為:
iNumElems = ArraySize (aArray [, iDim])
其中iNumElems表示數組中元素個數,數據類型是integer,aArray是想要計算的數組名,數據類型是Array of AnyType。iDim是可選參數,其數據類型為integer,表示想要計算的數組的維數,用在需要對多維數組的某一維進行統計的時候,如果統計的數組不是多維的,該參數必須是1。
注意,ArraySize函數不能用于我們下一節將要講到的List數據類型。因為ArraySize()是用來統計數組的尺寸的,但是List變量是沒有尺寸大小的。下面這個例子用來統計一個數組aiTempPerDay第二維的大小。iElements = ArraySize (aiTempPerDay, 2)
另外,函數ArraySize常常用來檢查是否一個數組的大小發生了動態的改變。
1. ArrayResize()
改變數組中元素的個數。其函數原型是:
ArrayResize (aArray, iNewSize [, iDim])
參數aArray表示數組名,它是一個inout的變量,數據類型為Array of AnyType。iNewSize是新數組的大小,數據類型是integer,iDim是一個可選參數,表示需要resize的數組的某一維,如果數組不是多維的,那么該參數必須為1.其數據類型是integer。
下面是一個ArrayResize函數的使用樣例:
INTEGER aiTempPerDay[5][4]
testcase arayresize_example ()
aiTempPerDay = {...}
{10, 12, 8, 17}
{-1, 0, 17, -9}
{14, 1, 1, 0}
{75, 32, 18, 103}
{9, -7, -2, 3}
// 將第2維的大小從4改成8
ArrayResize (aiTempPerDay, 8, 2)
2. ArraySort()
該函數在一個數組中將各元素排序,其函數原型如下:
ArraySort (aArray [, iMaxIndex])
參數aArray不用多說,是數組名。不過它的類型不是Array of AnyType,而是inout Array of Boolean, integer, real ,string 或者是ENUM。如果一個多維的數組,你可以指定其子數組進行排序。iMaxIndex是一個可選參數,表示最大排序范圍。如果省略該參數,表示對整個數組進行排序。
注意,在windows里面silktest使用基于字典的算法進行排序。
如果要對string的數組進行比較并且用ASCII值比較,需要在partner.ini文件Runtime選項中添加一行AsciiSort=TRUE。這個設置會在比較string的時候有用,而不僅僅是對list of string的比較有效。
ArraySort函數會改變傳入的數組,下面是一個例子:
INTEGER aiTempPerDay[5][4]
testcase arraysort_example ()
aiTempPerDay = {...}
{10, 12, 8, 17}
{-1, 0, 17, -9}
{14, 1, 1, 0}
{75, 32, 18, 103}
{9, -7, -2, 3}
ArraySort (aiTempPerDay[3])
Print (aiTempPerDay[3]) // 打印: {0,1,1,14}
ArraySort (aiTempPerDay[5], 3)
Print (aiTempPerDay[5]) // 打印: {-7,-2,9,3}
3. IsArray()
測試一個表達式是否是一個array。
該函數的原型為:bTest = IsArray (aExpression)
其中bTest是Boolean類型的返回值。aExpresstion是需要測試的表達式,它的類型是AnyType。下面是一個例子:
testcase IsArrayExample ()
INTEGER i = 1
ARRAY[2] OF STRING asFruit = {...}
"apples"
"oranges"
Print (IsArray (asFruit)) // 打印: TRUE
Print (IsArray (i)) // 打印: FALSE
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/