ycl

Artifact [9b7788f7d5]
Login

Artifact 9b7788f7d54d7ccf9275ac80406739bf02842005:


#! /bin/env tclsh

proc suite_main {} {
	package require {ycl proc}
	package require {ycl chan diagnostic}
	[yclprefix] proc alias [yclprefix]::proc::alias
	[yclprefix] proc alias aliases [yclprefix] proc aliases
	aliases {
		{ycl list} {
			sl
		}
		{ycl switch} {
			lswistch
		}
	}
	package require {ycl test}
	[yclprefix]::test::init

	variable cleanup1
	variable setup1

	test lswitch {} -setup $setup1 -body {
		set list {colorless green ideas sleep furiously}
		lswitch $list {
			{colorless green} {
				lappend res one
			}
		}
		lswitch $list {
			{colorless green} {
				lappend res two
			}
			default {
				lappend res three
			}
		}
		lswitch $list {
			foo {
				lappend res four 
			}
			{colorless green ideas} {
				lappend res five 
			}
		}
		lswitch $list {
			foo {
				lappend res six 
			}
			{colorless green goop} {
				lappend res seven 
			}
			default {
				lappend res eight 
			}
		}
		set res
	} -result [sl {
		one two five eight
	}]

	set list {colorless green ideas sleep furiously}

	test lswitch_glob {} -setup $setup1 -body {
		lswitch -glob $list {
			doop {
				lappend res one
			}
		}

		lswitch -glob $list {
			* {
				lappend res two
			}
		}

		lswitch -glob $list {
			{* green}  {
				lappend res three
			}
		}

		lswitch -glob $list {
			{* blue}  {
				lappend res four 
			}
		}

		lswitch -glob $list {
			doop {
				lappend res five
			}
			{* green}  {
				lappend res six 
			}
		}
		set res
	} -result [sl {
		two three six
	}]

	test lswitch_regexp {} -setup $setup1 -body {
		lswitch -regexp $list {
			doop {
				lappend res one
			}
			.* {
				lappend res two
			}
		}

		lswitch -regexp $list {
			doop {
				lappend res three
			}
			{.* doop} {
				lappend res four
			}
		}

		lswitch -regexp -nocase $list {
			doop {
				lappend res five
			}
			{.* G.*} {
				lappend res six
			}
		}

		lswitch -regexp $list {
			doop {
				lappend res seven
			}
			{.* g.*x} {
				lappend res eight
			}
			default {
				lappend res nine
			}
		}

		lswitch -regexp -nocase $list {
			doop {
				lappend res ten
			}
			{.* G.*} {
				lappend res eleven
			}
		}
		set res
	} -cleanup $cleanup1 -result [sl {
		two six nine eleven
	}]

	test lswitch_regexp_matchvar {} -setup $setup1 -body {
		lswitch -regexp -matchvar matches $list {
			doop {
				lappend res one
			}
		}
		lappend res $matches
		lswitch -regexp -matchvar matches $list {
			doop {
				lappend res two
			}
			{.* {gr([^a]*)n.*}} {
				lappend res three
			}
		}
		lappend res $matches 
		set res
	} -cleanup $cleanup1 -result [sl {
		{} three {green ee}
	}]

	test lswitch_regexp_indexvar {} -setup $setup1 -body {
		lswitch -regexp -indexvar indices $list {
			doop {
				lappend res one
			}
		}
		lappend res $indices
		lswitch -regexp -indexvar indices  $list {
			doop {
				lappend res two
			}
			{colorless .* .* .* {fu([^l]*)(.*)}} {
				lappend res three
			}
		}
		lappend res $indices 
		set res
	} -cleanup $cleanup1 -result [sl {
		{} three {{0 8} {2 6} {7 8}}
	}]

	test lswitch_regexp_indexvar_matchvar {} -setup $setup1 -body {
		lswitch -regexp -indexvar indices -matchvar matches $list {
			doop {
				lappend res one
			}
		}
		lappend res $matches
		lappend res $indices
		lswitch -regexp -indexvar indices -matchvar matches  $list {
			doop {
				lappend res two
			}
			{colorless .* .* .* {fu([^l]*)(.*)}} {
				lappend res three
			}
		}
		lappend res $matches 
		lappend res $indices 
		set res
	} -cleanup $cleanup1 -result [sl {
		{} {} three {furiously rious ly} {{0 8} {2 6} {7 8}}
	}]

	cleanupTests
}

variable setup1 {
	set res {}
}

variable cleanup1 {
	catch {
		set res {}
	}
	catch {
		unset matches
	}
	catch {
		unset indices
	}
}