Artifact 22ecaa86b1b207be85bc2db9038f98df49f9dc0d:
- File
packages/bits/lib/struct.test.tcl
— part of check-in
[4dbdfbacb4]
at
2019-04-29 09:08:29
on branch trunk
— bits
detect truncation of data
chan removed command oschan new commands osout
osin
osboth
crypto sha
extensive development
implement text mode
proc
added "trigger" feature
program
add "translation" option
string chan reimplement based on Tcl issue [de232b49f26d] and [67a5eabbd3d1] (user: pooryorick size: 4221)
#! /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 }