ycl

Artifact [22ecaa86b1]
Login

Artifact [22ecaa86b1]

Artifact 22ecaa86b1b207be85bc2db9038f98df49f9dc0d:


#! /bin/env tclsh

package require {ycl test}

proc suite_main {} {
	package require {ycl proc}
	namespace import [yclprefix]::proc::alias

	package require {ycl bits}
	[yclprefix] proc alias number [yclprefix]::bits::number

	package require {ycl list}
	alias sl [yclprefix]::list::sl

	alias encode [yclprefix]::bits::struct::encode
	alias decode [yclprefix]::bits::struct::decode


	[yclprefix]::test::init
	namespace import [yclprefix]::test::cleanup1

	test length {} -body {
		set data hello 
		for {set i 1} {$i < 100} {incr i} {
			append data " $i"
		}
		set encoded [encode value $data]
		append encoded " goodbye"

		lassign [decode extract $encoded 0] lengthlength length data2
		lappend res [expr {$data eq $data2}]
		lappend res $lengthlength $length

		set data1 [string range $data 0 126]
		set encoded [encode value $data1]
		lassign [decode extract $encoded 0] lengthlength length data2
		lappend res [expr {$data1 eq $data2}]
		lappend res $lengthlength $length

		set data1 [string range $data 0 127]
		set encoded [encode value $data1]
		lassign [decode extract $encoded 0] lengthlength length data2
		lappend res [expr {$data1 eq $data2}]
		lappend res $lengthlength $length

		return $res
	} -cleanup [cleanup1] -result [sl {
		1 2 293
		1 1 127
		1 2 128
	}]


	test truncated {} -body {
		set data hello 
		set encoded [encode value $data]
		set encoded [string range $encoded 0 end-1]

		lappend res [catch {
			decode extract $encoded 0
		} cres copts] $cres
	} -cleanup [cleanup1] -result [sl {
		1 {not enough data}
	}]


	test start {} -body {
		set data hello 
		for {set i 1} {$i < 100} {incr i} {
			append data " $i"
		}
		set before {some earlier data}
		set encoded $before[encode value $data]
		set start [string length $before]
		append encoded " goodbye"

		lassign [decode extract $encoded $start] lengthlength length data2
		lappend res [expr {$data eq $data2}]
		lappend res $lengthlength $length

		set data1 [string range $data 0 126]
		set encoded $before[encode value $data1]
		lassign [decode extract $encoded $start] lengthlength length data2
		lappend res [expr {$data1 eq $data2}]
		lappend res $lengthlength $length

		set data1 [string range $data 0 127]
		set encoded $before[encode value $data1]
		lassign [decode extract $encoded $start] lengthlength length data2
		lappend res [expr {$data1 eq $data2}]
		lappend res $lengthlength $length

		return $res
	} -cleanup [cleanup1] -result [sl {
		1 2 293
		1 1 127
		1 2 128
	}]

	test number_encoded {} -setup {} -body {

		set encoded [encode value [number encode 413]]
		lassign [decode extract $encoded 0] ll l number2
		set number2 [number decode $number2]
		lappend res [list $ll $l $number2]

		set encoded [encode value [number encode 255]]
		lassign [decode extract $encoded 0] ll l number2
		set number2 [number decode $number2]
		lappend res [list $ll $l $number2]

		return $res
	} -cleanup [cleanup1] -result [sl {
		{1 2 413}
		{1 1 255}
	}]

	test parse_emptystring {} -setup {} -body {

		set encoded [encode value {}]
		lappend res [decode parse $encoded]

		set encoded [encode value {}]
		append encoded [encode value {}]
		lappend res [decode parse $encoded]

		set encoded [encode value one]
		append encoded [encode value {}]
		lappend res [decode parse $encoded]

		set encoded [encode value {}]
		append encoded [encode value one]
		append encoded [encode value {}]
		lappend res [decode parse $encoded]

		return $res
	} -cleanup [cleanup1] -result [sl {
		{0 {{}}}
		{0 {{} {}}}
		{0 {one {}}}
		{0 {{} one {}}}
	}]

	test parse_levels {} -setup {} -body {

		set encoded [encode value one]
		append encoded [encode down]
			append encoded [encode value two]
			append encoded [encode value three]
		append encoded [encode up]
		append encoded [encode down]
			append encoded [encode value four]
			append encoded [encode down]
				append encoded [encode value five]
				append encoded [encode value six]
			append encoded [encode up]
		append encoded [encode up]
		append encoded [encode value seven]
		append encoded [encode end]
		lappend res [decode parse $encoded]

		return $res
	} -cleanup [cleanup1] -result [sl {
		{1 {one {two three} {four {five six}} seven}}
	}]



	cleanupTests
}