среда, 7 октября 2015 г.

#1172. Тестирование скриптовых слов. Только код

Определения слов и тесты:

UNIT string.ms.dict

USES
 Documentation.ms.dict
 params.ms.dict
 core.ms.dict
 map.ms.dict
 Testing.ms.dict
 io.ms.dict
;

: (string)
 ^ IN aValue
 aValue DO ToPrintable
; // (string)

STRING FUNCTION string:CatWihAny
 STRING IN aString
 IN aValue
 aString aValue ToPrintable Cat =: Result
; // string:CatWihAny

STRING FUNCTION any:Cat
 ARRAY IN anArray
 anArray .map> ToPrintable strings:Cat =: Result
; // any:Cat

TestsFor any:Cat
 Test T1 [ 'A' 123 'B' ] any:Cat Print ;
 Test T2 [ 'A' 124 'B' ] any:Cat Print ;
; // TestsFor any:Cat

STRING FUNCTION (+)?
 STRING in aPrefix
 STRING right aSuffix
 %SUMMARY 'Если aSuffix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ;
 Result := ''
 STRING VAR l_Suffix
 aSuffix =: l_Suffix
 if ( l_Suffix =/= '' ) then
  ( aPrefix l_Suffix Cat =: Result )
; // (+)?

TestsFor (+)?
 Test T1 '' (+)? 'B' Print ;
 Test T2 'A' (+)? 'B' Print ;
 Test T3 'A' (+)? '' Print ;
 Test T4 'A' (+)? 'D' Print ;
 Test T5 'A' (+)? '123' Print ;
; // TestsFor (+)?

STRING FUNCTION ?(+)
 STRING in aPrefix
 STRING right aSuffix
 %SUMMARY 'Если aPrefix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ;
 Result := ''
 if ( aPrefix =/= '' ) then
  ( aPrefix aSuffix Cat =: Result )
; // ?(+)

TestsFor ?(+)
 Test T1 '' ?(+) 'B' Print ;
 Test T2 'A' ?(+) 'B' Print ;
 Test T3 'A' ?(+) '' Print ;
; // TestsFor ?(+)

STRING FUNCTION strings:CatSep>
 STRING right aSep
 ARRAY right aValues
 aValues aSep strings:CatSep =: Result
; // strings:CatSep>

TestsFor strings:CatSep>
 Test T1 strings:CatSep> ' ' [ 'A' 'B' ] Print ;
 Test T2 strings:CatSep> ' ' [ 'A ' 'B' ] Print ;
 Test T3 strings:CatSep> ' ' [ 'A ' ' B' ] Print ;
 Test T4 strings:CatSep> ' ' [ 'A' ' B' ] Print ;
 Test T5 strings:CatSep> ' ' [ '' 'B' ] Print ;
 Test T6 strings:CatSep> ' ' [ 'A' '' ] Print ;
; // TestsFor strings:CatSep>
 
WordAlias CatSep> strings:CatSep>

PROCEDURE string:Split:for>
  STRING IN aString
  STRING IN aSep
  ^ IN aLambda

 %SUMMARY 'Разделяет строку aString по разделителю aSep и для каждой части вызывает aLambda' ;

 while ( aString IsNil ! ) 
 begin
  aSep string:SplitTo! aString
  STRING VAR l_Part
  >>> l_Part
  if ( l_Part IsNil ! ) then
  begin
   l_Part aLambda DO
  end
 end
; // string:Split:for>

TestsFor string:Split:for>
 Test T1 'a b c' ' ' string:Split:for> Print ;
 Test T2 'a b  c' ' ' string:Split:for> Print ;
 Test T3 'abc' ' ' string:Split:for> Print ;
 Test T4 '' ' ' string:Split:for> Print ;
 Test T5 ' ' ' ' string:Split:for> Print ;
; // string:Split:for> 

Вызов тестов:

PROGRAM String.ms.script

USES
 string.ms.dict
 Testing.ms.dict
;

Test&Dump StringTest
 RunTests.in.array @[ (+)? ?(+) strings:CatSep> any:Cat string:Split:for> ]
  %REMARK 'Запускаем тесты к указанным скриптовым словам'
; // StringTest

StringTest

Комментариев нет:

Отправить комментарий