Skip to content

Commit

Permalink
[builtin/pp] Implement pp line (42) for spec tests
Browse files Browse the repository at this point in the history
Use it in spec/ysh-slice-range
  • Loading branch information
Andy C committed Dec 23, 2023
1 parent 3721191 commit 0be5c6a
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 42 deletions.
37 changes: 26 additions & 11 deletions builtin/io_ysh.py
Expand Up @@ -12,14 +12,18 @@
from core import error
from core.error import e_usage
from core import state
from core import ui
from core import vm
from data_lang import qsn
from data_lang import j8
from frontend import flag_spec
from frontend import match
from frontend import typed_args
from mycpp import mylib
from mycpp.mylib import log, Stdout
from data_lang import qsn
from data_lang import j8
from mycpp.mylib import log
from ysh import cpython

import yajl

from typing import TYPE_CHECKING, cast, Dict
if TYPE_CHECKING:
Expand Down Expand Up @@ -49,7 +53,7 @@ def __init__(self, mem, errfmt, procs, arena):
_Builtin.__init__(self, mem, errfmt)
self.procs = procs
self.arena = arena
self.stdout_ = Stdout()
self.stdout_ = mylib.Stdout()

def Run(self, cmd_val):
# type: (cmd_value.Argv) -> int
Expand Down Expand Up @@ -87,31 +91,42 @@ def Run(self, cmd_val):
self.stdout_.write('\n')

elif action == 'asdl':
# TODO: could do pp asdl (x, y, z)
# TODO: could be pp asdl (x, y, z)
rd = typed_args.ReaderForProc(cmd_val)
val = rd.PosValue()
rd.Done()

tree = val.PrettyTree()

f = mylib.Stdout()

# TODO: ASDL should print the IDs. And then they will be
# line-wrapped.
# The IDs should also be used to detect cycles, and omit values
# already printed.
#id_str = vm.ValueIdString(val)
#f.write(' <%s%s>\n' % (ysh_type, id_str))

pretty_f = fmt.DetectConsoleOutput(f)
pretty_f = fmt.DetectConsoleOutput(self.stdout_)
fmt.PrintTree(tree, pretty_f)
f.write('\n')
self.stdout_.write('\n')

status = 0

elif action == 'line':
# Print format for unit tests
print('TODO')

# TODO: could be pp asdl (x, y, z)
rd = typed_args.ReaderForProc(cmd_val)
val = rd.PosValue()
rd.Done()

ysh_type = ui.ValType(val)
self.stdout_.write('(%s) ' % ysh_type)
if mylib.PYTHON:
obj = cpython._ValueToPyObj(val)
j = yajl.dumps(obj, indent=-1)
self.stdout_.write(j)
self.stdout_.write('\n')

status = 0

elif action == 'gc-stats':
Expand Down Expand Up @@ -171,7 +186,7 @@ class Write(_Builtin):
def __init__(self, mem, errfmt):
# type: (state.Mem, ErrorFormatter) -> None
_Builtin.__init__(self, mem, errfmt)
self.stdout_ = Stdout()
self.stdout_ = mylib.Stdout()
self.printer = j8.Printer(0)

def Run(self, cmd_val):
Expand Down
2 changes: 1 addition & 1 deletion doc/ref/toc-ysh.md
Expand Up @@ -114,7 +114,7 @@ Siblings: [OSH Topics](toc-osh.html), [Data Topics](toc-data.html)

```chapter-links-builtin-cmd
[Memory] append Add elements to end of array
pp asdl cell X gc-stats X line proc
pp asdl cell X gc-stats line proc
[Handle Errors] try Run with errexit and set _status
boolstatus Enforce 0 or 1 exit status
error error 'failed' (status=2)
Expand Down
60 changes: 30 additions & 30 deletions spec/ysh-slice-range.test.sh
Expand Up @@ -28,63 +28,63 @@

#### subscript and slice :| 1 2 3 4 |
var myarray = :|1 2 3 4|
= myarray[1]
= myarray[1:3]
pp line (myarray[1])
pp line (myarray[1:3])

echo 'implicit'
= myarray[:2]
= myarray[2:]
pp line (myarray[:2])
pp line (myarray[2:])

echo 'out of bounds'
= myarray[:5]
= myarray[-5:]
pp line (myarray[:5])
pp line (myarray[-5:])

# Stride not supported
#= myarray[1:4:2]

# Now try omitting some
#= myarray[1:4:2]
## STDOUT:
(Str) '2'
(List) ['2', '3']
(Str) "2"
(List) ["2","3"]
implicit
(List) ['1', '2']
(List) ['3', '4']
(List) ["1","2"]
(List) ["3","4"]
out of bounds
(List) ['1', '2', '3', '4']
(List) ['1', '2', '3', '4']
(List) ["1","2","3","4"]
(List) ["1","2","3","4"]
## END

#### subscript and slice of List
var mylist = [1,2,3,4]
= mylist[1]
= mylist[1:3]
pp line (mylist[1])
pp line (mylist[1:3])

echo 'implicit'
= mylist[:2]
= mylist[2:]
pp line (mylist[:2])
pp line (mylist[2:])
## STDOUT:
(Int) 2
(List) [2, 3]
(List) [2,3]
implicit
(List) [1, 2]
(List) [3, 4]
(List) [1,2]
(List) [3,4]
## END

#### expressions and negative indices
var myarray = %(1 2 3 4 5)
= myarray[-1]
= myarray[-4:-2]
var myarray = :|1 2 3 4 5|
pp line (myarray[-1])
pp line (myarray[-4:-2])

echo 'implicit'
= myarray[:-2]
= myarray[-2:]
pp line (myarray[:-2])
pp line (myarray[-2:])
## STDOUT:
(Str) '5'
(List) ['2', '3']
(Str) "5"
(List) ["2","3"]
implicit
(List) ['1', '2', '3']
(List) ['4', '5']
(List) ["1","2","3"]
(List) ["4","5"]
## END

#### Index with expression
Expand All @@ -98,9 +98,9 @@ echo $val
#### Copy with a[:]
var a = [1,2,3]
var b = a[:]
= b
pp line (b)
## STDOUT:
(List) [1, 2, 3]
(List) [1,2,3]
## END

#### Iterate over range
Expand Down

0 comments on commit 0be5c6a

Please sign in to comment.