#!/usr/bin/env tclsh
source streamtestlib.tcl

# Define records, protocol and startup (text goes to files)
# The asynPort "device" is connected to a network TCP socket
# Talk to the socket with send/receive/assure
# Send commands to the ioc shell with ioccmd

set records {
    record (ai, "DZ:test1")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test1 device")
    }
    record (ai, "DZ:test2")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test2 device")
    }
    record (ai, "DZ:test3")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test3 device")
    }
    record (ai, "DZ:test4")
    {
        field (DTYP, "stream")
        field (INP,  "@test.proto test4 device")
    }
}

set protocol {
    Terminator = LF;
    @mismatch {out "mismatch";}
    test1 {in "%f"; out "|%f|%10f|%.2f|%- 10.5f|% f|%+f|%-5.1f|%#f|"; }
    test2 {in "%6f%(DESC)s"; out "|%g|%(DESC)s|"; }
    test3 {in "% 6f%(DESC)s"; out "|%g|%(DESC)s|"; }
    test4 {in "%#f"; out "%f"; }
}

set startup {
}

set debug 0

startioc

set inf [format %f inf]
set nan [format %f nan]

ioccmd {dbpf DZ:test1.PROC 1}
send "3.14159265359\n"
assure "|3.141593|  3.141593|3.14| 3.14159  | 3.141593|+3.141593|3.1  |3.141593|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "-3.14159265359\n"
assure "|-3.141593| -3.141593|-3.14|-3.14159  |-3.141593|-3.141593|-3.1 |-3.141593|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "0\n"
assure "|0.000000|  0.000000|0.00| 0.00000  | 0.000000|+0.000000|0.0  |0.000000|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "NAN\n"
assure "|$nan|       $nan|$nan| $nan      | $nan|+$nan|$nan  |$nan|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "-Inf\n"
assure "|-$inf|      -$inf|-$inf|-$inf      |-$inf|-$inf|-$inf |-$inf|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "1e6\n"
assure "|1000000.000000|1000000.000000|1000000.00| 1000000.00000| 1000000.000000|+1000000.000000|1000000.0|1000000.000000|\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "   -  3.14159265359\n"
assure "mismatch\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "bla\n"
assure "mismatch\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "  bla\n"
assure "mismatch\n"
ioccmd {dbpf DZ:test1.PROC 1}
send "-bla\n"
assure "mismatch\n"

ioccmd {dbpf DZ:test2.PROC 1}
send "3.14159265359\n"
assure "|3.1415|9265359|\n"
ioccmd {dbpf DZ:test2.PROC 1}
send "     3.14159265359\n"
assure "|3.1415|9265359|\n"
ioccmd {dbpf DZ:test2.PROC 1}
send "  10blabla\n"
assure "|10|blabla|\n"
ioccmd {dbpf DZ:test2.PROC 1}
send "  1\n"
assure "|1||\n"

ioccmd {dbpf DZ:test3.PROC 1}
send "3.14159265359\n"
assure "|3.1415|9265359|\n"
ioccmd {dbpf DZ:test3.PROC 1}
send "     3.14159265359\n"
assure "|3|.14159265359|\n"
ioccmd {dbpf DZ:test3.PROC 1}
send "  10blabla\n"
assure "|10|blabla|\n"
ioccmd {dbpf DZ:test3.PROC 1}
send "  1\n"
assure "|1||\n"

ioccmd {dbpf DZ:test4.PROC 1}
send "3.14159265359\n"
assure "3.141593\n"
ioccmd {dbpf DZ:test4.PROC 1}
send "     -3.14159265359\n"
assure "-3.141593\n"
ioccmd {dbpf DZ:test4.PROC 1}
send "   -  3.14159265359\n"
assure "-3.141593\n"
ioccmd {dbpf DZ:test4.PROC 1}
send "   +  3.14159265359\n"
assure "3.141593\n"
ioccmd {dbpf DZ:test4.PROC 1}
send "   +-  3.14159265359\n"
assure "mismatch\n"

finish
