dotvim/.vim/bundle/gundo/tests/bundled/lh-vim-lib/tests/lh/topological-sort.vim
2015-09-23 13:33:15 +02:00

121 lines
3.5 KiB
VimL

"=============================================================================
" $Id: topological-sort.vim 246 2010-09-19 22:40:58Z luc.hermitte $
" File: tests/lh/topological-sort.vim {{{1
" Author: Luc Hermitte <EMAIL:hermitte {at} free {dot} fr>
" <URL:http://code.google.com/p/lh-vim/>
" Version: 2.2.1
" Created: 17th Apr 2008
" Last Update: $Date: 2010-09-19 18:40:58 -0400 (Sun, 19 Sep 2010) $
"------------------------------------------------------------------------
" Description: «description»
"
"------------------------------------------------------------------------
" Installation: «install details»
" History: «history»
" TODO: «missing features»
" }}}1
"=============================================================================
let s:cpo_save=&cpo
set cpo&vim
"------------------------------------------------------------------------
UTSuite [lh-vim-lib] topological sort
" Fully defineds DAGs {{{1
" A Direct Acyclic Graph {{{2
let s:dag1 = {}
let s:dag1[7] = [11, 8]
let s:dag1[5] = [11]
let s:dag1[3] = [8, 10]
let s:dag1[11] = [2, 9, 10]
let s:dag1[8] = [9]
" A Direct Cyclic Graph {{{2
let s:dcg1 = deepcopy(s:dag1)
let s:dcg1[9] = [11]
" Check routine: are the elements correctly sorted? {{{2
function! s:DoTestOrder(elements)
Assert! len(a:elements) == 8
Assert index(a:elements, 7) < index(a:elements, 11)
Assert index(a:elements, 7) < index(a:elements, 8)
Assert index(a:elements, 5) < index(a:elements, 11)
Assert index(a:elements, 3) < index(a:elements, 8)
Assert index(a:elements, 3) < index(a:elements, 10)
Assert index(a:elements, 11) < index(a:elements, 2)
Assert index(a:elements, 11) < index(a:elements, 9)
Assert index(a:elements, 11) < index(a:elements, 10)
Assert index(a:elements, 8) < index(a:elements, 9)
endfunction
" Test DAG1 {{{2
function! s:TestDAG_depth()
let res = lh#graph#tsort#depth(s:dag1, [3, 5,7])
call s:DoTestOrder(res)
echo "D(s:dag1)=".string(res)
endfunction
function! s:TestDAG_breadth()
let res = lh#graph#tsort#breadth(s:dag1, [3, 5,7])
call s:DoTestOrder(res)
echo "B(s:dag1)=".string(res)
endfunction
" Test DCG1 {{{2
function! s:TestDCG_depth()
let expr = 'lh#graph#tsort#depth('.string(s:dcg1).', [3, 5,7])'
Assert should#throw(expr, 'Tsort: cyclic graph detected')
endfunction
function! s:TestDCG_breadth()
let expr = 'lh#graph#tsort#breadth('.string(s:dcg1).', [3, 5,7])'
Assert should#throw(expr, 'Tsort: cyclic graph detected')
endfunction
" Lazzy Evaluated DAGs {{{1
" Emulated lazzyness {{{2
" The time-consumings evaluation function
let s:called = 0
function! Fetch(node)
let s:called += 1
return has_key(s:dag1, a:node) ? (s:dag1[a:node]) : []
endfunction
" Test Fetch on a DAG {{{2
function! s:TestDAG_fetch()
let s:called = 0
let res = lh#graph#tsort#depth(function('Fetch'), [3,5,7])
call s:DoTestOrder(res)
echo "D(fetch)=".string(res)
echo "Fetch has been evaluated ".s:called." times / ".len(res)
Assert s:called == len(res)
endfunction
" Setup/Teardown functions {{{1
" display the test name before each assertion
function! s:Setup()
if exists('g:UT_print_test')
let s:old_print_test = g:UT_print_test
endif
let g:UT_print_test = 1
endfunction
function! s:Teardown()
if exists('s:old_print_test')
let g:UT_print_test = s:old_print_test
unlet s:old_print_test
else
unlet g:UT_print_test
endif
endfunction
" }}}1
let &cpo=s:cpo_save
"=============================================================================
" vim600: set fdm=marker: