From 4b034114e73a3605ed05edd264338e6c58a772f2 Mon Sep 17 00:00:00 2001 From: Denis Buzdalov Date: Sat, 7 Sep 2024 16:01:44 +0300 Subject: [PATCH] [ example ] Print generated sorted binary trees in tests --- .../src/Data/SortedBinTree.idr | 15 ++ .../tests/gens/sorted/Main.idr | 1 + .../tests/gens/sorted/expected | 96 ++++++++++ .../sorted-tree-naive/sorted-tree-naive.ipkg | 1 + .../src/Data/SortedBinTree.idr | 16 ++ .../tests/gens/sorted/Main.idr | 1 + .../tests/gens/sorted/expected | 172 ++++++++++++++++++ 7 files changed, 302 insertions(+) diff --git a/examples/sorted-tree-indexed/src/Data/SortedBinTree.idr b/examples/sorted-tree-indexed/src/Data/SortedBinTree.idr index 845b4c31d..77cf96ad5 100644 --- a/examples/sorted-tree-indexed/src/Data/SortedBinTree.idr +++ b/examples/sorted-tree-indexed/src/Data/SortedBinTree.idr @@ -1,6 +1,7 @@ module Data.SortedBinTree import public Data.Nat +import Data.String %default total @@ -13,3 +14,17 @@ export toList : SortedBinTree1 mi ma -> List Nat toList (Leaf x) = [x] toList (Node left right) = toList left ++ toList right + +export +Interpolation (SortedBinTree1 mi ma) where + interpolate $ Leaf x = "\{show x}" + interpolate $ Node l r = """ + . + \{ind "|" $ interpolate l} + \{ind " " $ interpolate r} + """ + where + ind : (pref : String) -> String -> String + ind k s = do + let f::fs = lines s | [] => "" + joinBy "\n" $ "|" :: ("|- " ++ f) :: (("\{k} " ++) <$> fs) diff --git a/examples/sorted-tree-indexed/tests/gens/sorted/Main.idr b/examples/sorted-tree-indexed/tests/gens/sorted/Main.idr index 4a3344bff..fc756d37c 100644 --- a/examples/sorted-tree-indexed/tests/gens/sorted/Main.idr +++ b/examples/sorted-tree-indexed/tests/gens/sorted/Main.idr @@ -15,5 +15,6 @@ main = do putStrLn "--------------" let list = toList tree putStrLn "min: \{mi}, max: \{ma}, length: \{length list}" + putStrLn "tree:\n\{tree}" putStrLn "as list: \{show list}" putStrLn "sorted: \{show $ sorted list}" diff --git a/examples/sorted-tree-indexed/tests/gens/sorted/expected b/examples/sorted-tree-indexed/tests/gens/sorted/expected index fb11e2355..a508d3624 100644 --- a/examples/sorted-tree-indexed/tests/gens/sorted/expected +++ b/examples/sorted-tree-indexed/tests/gens/sorted/expected @@ -1,40 +1,136 @@ -------------- min: 1, max: 4, length: 2 +tree: +. +| +|- 1 +| +|- 4 as list: [1, 4] sorted: True -------------- min: 0, max: 7, length: 3 +tree: +. +| +|- . +| | +| |- 0 +| | +| |- 3 +| +|- 7 as list: [0, 3, 7] sorted: True -------------- min: 3, max: 5, length: 2 +tree: +. +| +|- 3 +| +|- 5 as list: [3, 5] sorted: True -------------- min: 1, max: 7, length: 4 +tree: +. +| +|- . +| | +| |- . +| | | +| | |- 1 +| | | +| | |- 2 +| | +| |- 3 +| +|- 7 as list: [1, 2, 3, 7] sorted: True -------------- min: 3, max: 6, length: 2 +tree: +. +| +|- 3 +| +|- 6 as list: [3, 6] sorted: True -------------- min: 0, max: 5, length: 5 +tree: +. +| +|- . +| | +| |- . +| | | +| | |- . +| | | | +| | | |- 0 +| | | | +| | | |- 1 +| | | +| | |- 2 +| | +| |- 3 +| +|- 5 as list: [0, 1, 2, 3, 5] sorted: True -------------- min: 3, max: 3, length: 1 +tree: +3 as list: [3] sorted: True -------------- min: 4, max: 4, length: 1 +tree: +4 as list: [4] sorted: True -------------- min: 0, max: 4, length: 5 +tree: +. +| +|- . +| | +| |- . +| | | +| | |- . +| | | | +| | | |- 0 +| | | | +| | | |- 1 +| | | +| | |- 2 +| | +| |- 3 +| +|- 4 as list: [0, 1, 2, 3, 4] sorted: True -------------- min: 1, max: 6, length: 4 +tree: +. +| +|- . +| | +| |- . +| | | +| | |- 1 +| | | +| | |- 2 +| | +| |- 3 +| +|- 6 as list: [1, 2, 3, 6] sorted: True diff --git a/examples/sorted-tree-naive/sorted-tree-naive.ipkg b/examples/sorted-tree-naive/sorted-tree-naive.ipkg index 9c08c762a..c041f0054 100644 --- a/examples/sorted-tree-naive/sorted-tree-naive.ipkg +++ b/examples/sorted-tree-naive/sorted-tree-naive.ipkg @@ -8,6 +8,7 @@ sourcedir = "src" builddir = ".build" depends = deptycheck + , prettier modules = Data.SortedBinTree , Data.SortedBinTree.Gen diff --git a/examples/sorted-tree-naive/src/Data/SortedBinTree.idr b/examples/sorted-tree-naive/src/Data/SortedBinTree.idr index 0a1708933..50b9127be 100644 --- a/examples/sorted-tree-naive/src/Data/SortedBinTree.idr +++ b/examples/sorted-tree-naive/src/Data/SortedBinTree.idr @@ -1,6 +1,8 @@ module Data.SortedBinTree import public Data.Nat +import Data.Primitives.Interpolation +import Data.String %default total @@ -35,3 +37,17 @@ export toList : SortedBinTree -> List Nat toList Empty = [] toList $ Node x left right = toList left ++ [x] ++ toList right + +export +Interpolation SortedBinTree where + interpolate Empty = "*" + interpolate $ Node x l r = """ + \{show x} + \{ind "|" $ interpolate l} + \{ind " " $ interpolate r} + """ + where + ind : (pref : String) -> String -> String + ind k s = do + let f::fs = lines s | [] => "" + joinBy "\n" $ "|" :: ("|- " ++ f) :: (("\{k} " ++) <$> fs) diff --git a/examples/sorted-tree-naive/tests/gens/sorted/Main.idr b/examples/sorted-tree-naive/tests/gens/sorted/Main.idr index 540eac7e7..ff63f990d 100644 --- a/examples/sorted-tree-naive/tests/gens/sorted/Main.idr +++ b/examples/sorted-tree-naive/tests/gens/sorted/Main.idr @@ -15,5 +15,6 @@ main = do putStrLn "--------------" let list = toList tree putStrLn "length: \{length list}" + putStrLn "tree:\n\{tree}" putStrLn "as list: \{show list}" putStrLn "sorted: \{show $ sorted list}" diff --git a/examples/sorted-tree-naive/tests/gens/sorted/expected b/examples/sorted-tree-naive/tests/gens/sorted/expected index 866a7128f..6299a1b6a 100644 --- a/examples/sorted-tree-naive/tests/gens/sorted/expected +++ b/examples/sorted-tree-naive/tests/gens/sorted/expected @@ -1,40 +1,212 @@ -------------- length: 5 +tree: +2 +| +|- * +| +|- 3 + | + |- * + | + |- 6 + | + |- 4 + | | + | |- * + | | + | |- 5 + | | + | |- * + | | + | |- * + | + |- * as list: [2, 3, 4, 5, 6] sorted: True -------------- length: 5 +tree: +6 +| +|- 0 +| | +| |- * +| | +| |- 5 +| | +| |- 4 +| | | +| | |- 3 +| | | | +| | | |- * +| | | | +| | | |- * +| | | +| | |- * +| | +| |- * +| +|- * as list: [0, 3, 4, 5, 6] sorted: True -------------- length: 0 +tree: +* as list: [] sorted: True -------------- length: 6 +tree: +11 +| +|- 5 +| | +| |- 2 +| | | +| | |- 0 +| | | | +| | | |- * +| | | | +| | | |- 1 +| | | | +| | | |- * +| | | | +| | | |- * +| | | +| | |- 4 +| | | +| | |- * +| | | +| | |- * +| | +| |- * +| +|- * as list: [0, 1, 2, 4, 5, 11] sorted: True -------------- length: 3 +tree: +10 +| +|- 3 +| | +| |- * +| | +| |- 5 +| | +| |- * +| | +| |- * +| +|- * as list: [3, 5, 10] sorted: True -------------- length: 0 +tree: +* as list: [] sorted: True -------------- length: 7 +tree: +8 +| +|- 2 +| | +| |- 0 +| | | +| | |- * +| | | +| | |- 1 +| | | +| | |- * +| | | +| | |- * +| | +| |- 5 +| | +| |- 4 +| | | +| | |- 3 +| | | | +| | | |- * +| | | | +| | | |- * +| | | +| | |- * +| | +| |- * +| +|- * as list: [0, 1, 2, 3, 4, 5, 8] sorted: True -------------- length: 4 +tree: +9 +| +|- 3 +| | +| |- * +| | +| |- 5 +| | +| |- 4 +| | | +| | |- * +| | | +| | |- * +| | +| |- * +| +|- * as list: [3, 4, 5, 9] sorted: True -------------- length: 3 +tree: +4 +| +|- * +| +|- 8 + | + |- 5 + | | + | |- * + | | + | |- * + | + |- * as list: [4, 5, 8] sorted: True -------------- length: 5 +tree: +6 +| +|- 2 +| | +| |- * +| | +| |- 5 +| | +| |- 4 +| | | +| | |- 3 +| | | | +| | | |- * +| | | | +| | | |- * +| | | +| | |- * +| | +| |- * +| +|- * as list: [2, 3, 4, 5, 6] sorted: True