From ef92e415bc55256783cd943f0e4746399050e66c Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Sun, 8 May 2022 22:31:30 -0300 Subject: [PATCH 1/8] Add show mode --- src/TruthTables.jl | 1 + src/truthtable.jl | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/TruthTables.jl b/src/TruthTables.jl index c969904..28bc0d8 100644 --- a/src/TruthTables.jl +++ b/src/TruthTables.jl @@ -3,6 +3,7 @@ module TruthTables using Tables, PrettyTables export @truthtable +export showmode! export -->, <--> export ∧, ∨, ¬ diff --git a/src/truthtable.jl b/src/truthtable.jl index 6abcd19..2adc568 100644 --- a/src/truthtable.jl +++ b/src/truthtable.jl @@ -10,11 +10,37 @@ function TruthTable(columns::Vector{Vector{Bool}}, colnames::Vector{Symbol}) end function Base.show(io::IO, table::TruthTable) + formatter = getformatter() println(io, "TruthTable") pretty_table(io, table, vcrop_mode=:middle, header_alignment=:c, header=table.colnames, + formatters=formatter, alignment=:l ) end + +# show mode +const SHOW_MODE = Ref(:bool) + +showmode!() = (SHOW_MODE[] = :bool) + +function showmode!(mode::Symbol) + if mode ∉ (:bool, :bit, :letter) + throw(ArgumentError("Invalid show mode, use :bool, :bit or :letter.")) + end + SHOW_MODE[] = mode +end + +# formatters +_bit_formatter(v, i, j) = Int(v) +_letter_formatter(v, i, j) = v ? "T" : "F" + +function getformatter() + mode = SHOW_MODE[] + mode == :bool && return nothing + mode == :bit && return _bit_formatter + mode == :letter && return _letter_formatter + return nothing +end From a656dd4a0f3ce611d0f92ebc8d81ff5bacc05730 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 9 May 2022 09:40:47 -0300 Subject: [PATCH 2/8] :bool -> :default --- src/truthtable.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/truthtable.jl b/src/truthtable.jl index 2adc568..df3e7a3 100644 --- a/src/truthtable.jl +++ b/src/truthtable.jl @@ -22,13 +22,13 @@ function Base.show(io::IO, table::TruthTable) end # show mode -const SHOW_MODE = Ref(:bool) +const SHOW_MODE = Ref(:default) -showmode!() = (SHOW_MODE[] = :bool) +showmode!() = (SHOW_MODE[] = :default) function showmode!(mode::Symbol) - if mode ∉ (:bool, :bit, :letter) - throw(ArgumentError("Invalid show mode, use :bool, :bit or :letter.")) + if mode ∉ (:default, :bit, :letter) + throw(ArgumentError("Invalid show mode, use :default, :bit or :letter.")) end SHOW_MODE[] = mode end @@ -39,7 +39,7 @@ _letter_formatter(v, i, j) = v ? "T" : "F" function getformatter() mode = SHOW_MODE[] - mode == :bool && return nothing + mode == :default && return nothing mode == :bit && return _bit_formatter mode == :letter && return _letter_formatter return nothing From dfd8556b194bacb6cacf2d25bdf504f35395cc1c Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 9 May 2022 10:26:42 -0300 Subject: [PATCH 3/8] Unexport the showmode! function --- src/TruthTables.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/TruthTables.jl b/src/TruthTables.jl index 28bc0d8..c969904 100644 --- a/src/TruthTables.jl +++ b/src/TruthTables.jl @@ -3,7 +3,6 @@ module TruthTables using Tables, PrettyTables export @truthtable -export showmode! export -->, <--> export ∧, ∨, ¬ From a61b3fcf7fa1ea6268f75a54ad7b678a6bb97275 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Mon, 9 May 2022 16:47:50 -0300 Subject: [PATCH 4/8] Add docstring template --- src/truthtable.jl | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/truthtable.jl b/src/truthtable.jl index df3e7a3..19e9915 100644 --- a/src/truthtable.jl +++ b/src/truthtable.jl @@ -24,8 +24,17 @@ end # show mode const SHOW_MODE = Ref(:default) -showmode!() = (SHOW_MODE[] = :default) +""" + TruthTables.showmode!(mode::Symbol = :default) + +Description... + +# Examples +```julia +# code... +``` +""" function showmode!(mode::Symbol) if mode ∉ (:default, :bit, :letter) throw(ArgumentError("Invalid show mode, use :default, :bit or :letter.")) @@ -33,6 +42,8 @@ function showmode!(mode::Symbol) SHOW_MODE[] = mode end +showmode!() = (SHOW_MODE[] = :default) + # formatters _bit_formatter(v, i, j) = Int(v) _letter_formatter(v, i, j) = v ? "T" : "F" From b6feed9dc198e02e2961a1b922375dd8fab3ba4c Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Tue, 10 May 2022 17:57:32 -0300 Subject: [PATCH 5/8] Add docstring --- src/TruthTables.jl | 1 + src/showmode.jl | 93 ++++++++++++++++++++++++++++++++++++++++++++++ src/truthtable.jl | 35 ----------------- 3 files changed, 94 insertions(+), 35 deletions(-) create mode 100644 src/showmode.jl diff --git a/src/TruthTables.jl b/src/TruthTables.jl index c969904..91d10bb 100644 --- a/src/TruthTables.jl +++ b/src/TruthTables.jl @@ -6,6 +6,7 @@ export @truthtable export -->, <--> export ∧, ∨, ¬ +include("showmode.jl") include("truthtable.jl") include("tables.jl") include("macro.jl") diff --git a/src/showmode.jl b/src/showmode.jl new file mode 100644 index 0000000..4022806 --- /dev/null +++ b/src/showmode.jl @@ -0,0 +1,93 @@ +const SHOW_MODE = Ref(:default) + +""" + TruthTables.showmode!(mode::Symbol = :default) + +Changes the show mode of TruthTable type.\\ +The mode argument can be one of these symbols: `:default`, `:bit` or `:letter`.\\ +If mode is `:default`, the boolean values (`true` and `false`) will be show without formatting.\\ +If mode is `:bit`, `true` and `false` will be show as `1` and `0`.\\ +If mode is `:letter`, `true` and `false` will be show as `T` and `F`. + +# Examples + +```julia +julia> using TruthTables + +julia> tt = @truthtable p && q +TruthTable +┌───────┬───────┬───────┐ +│ p │ q │ p ∧ q │ +├───────┼───────┼───────┤ +│ true │ true │ true │ +│ false │ true │ false │ +│ true │ false │ false │ +│ false │ false │ false │ +└───────┴───────┴───────┘ + + +julia> TruthTables.showmode!(:bit) +:bit + +julia> tt +TruthTable +┌───┬───┬───────┐ +│ p │ q │ p ∧ q │ +├───┼───┼───────┤ +│ 1 │ 1 │ 1 │ +│ 0 │ 1 │ 0 │ +│ 1 │ 0 │ 0 │ +│ 0 │ 0 │ 0 │ +└───┴───┴───────┘ + + +julia> TruthTables.showmode!(:letter) +:letter + +julia> tt +TruthTable +┌───┬───┬───────┐ +│ p │ q │ p ∧ q │ +├───┼───┼───────┤ +│ T │ T │ T │ +│ F │ T │ F │ +│ T │ F │ F │ +│ F │ F │ F │ +└───┴───┴───────┘ + + +julia> TruthTables.showmode!() +:default + +julia> tt +TruthTable +┌───────┬───────┬───────┐ +│ p │ q │ p ∧ q │ +├───────┼───────┼───────┤ +│ true │ true │ true │ +│ false │ true │ false │ +│ true │ false │ false │ +│ false │ false │ false │ +└───────┴───────┴───────┘ +``` +""" +function showmode!(mode::Symbol) + if mode ∉ (:default, :bit, :letter) + throw(ArgumentError("Invalid show mode, use :default, :bit or :letter.")) + end + SHOW_MODE[] = mode +end + +showmode!() = (SHOW_MODE[] = :default) + +# formatters +_bit_formatter(v, i, j) = Int(v) +_letter_formatter(v, i, j) = v ? "T" : "F" + +function getformatter() + mode = SHOW_MODE[] + mode == :default && return nothing + mode == :bit && return _bit_formatter + mode == :letter && return _letter_formatter + return nothing +end diff --git a/src/truthtable.jl b/src/truthtable.jl index 19e9915..d78a68e 100644 --- a/src/truthtable.jl +++ b/src/truthtable.jl @@ -20,38 +20,3 @@ function Base.show(io::IO, table::TruthTable) alignment=:l ) end - -# show mode -const SHOW_MODE = Ref(:default) - -""" - TruthTables.showmode!(mode::Symbol = :default) - -Description... - -# Examples - -```julia -# code... -``` -""" -function showmode!(mode::Symbol) - if mode ∉ (:default, :bit, :letter) - throw(ArgumentError("Invalid show mode, use :default, :bit or :letter.")) - end - SHOW_MODE[] = mode -end - -showmode!() = (SHOW_MODE[] = :default) - -# formatters -_bit_formatter(v, i, j) = Int(v) -_letter_formatter(v, i, j) = v ? "T" : "F" - -function getformatter() - mode = SHOW_MODE[] - mode == :default && return nothing - mode == :bit && return _bit_formatter - mode == :letter && return _letter_formatter - return nothing -end From 0476a21fbce1e9f4891c183f19fcedd28559d4ff Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Wed, 11 May 2022 08:19:09 -0300 Subject: [PATCH 6/8] :default -> :bool; Update docstring --- src/showmode.jl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/showmode.jl b/src/showmode.jl index 4022806..b666428 100644 --- a/src/showmode.jl +++ b/src/showmode.jl @@ -1,13 +1,13 @@ -const SHOW_MODE = Ref(:default) +const SHOW_MODE = Ref(:bool) """ - TruthTables.showmode!(mode::Symbol = :default) + TruthTables.showmode!(mode::Symbol = :bool) -Changes the show mode of TruthTable type.\\ -The mode argument can be one of these symbols: `:default`, `:bit` or `:letter`.\\ -If mode is `:default`, the boolean values (`true` and `false`) will be show without formatting.\\ -If mode is `:bit`, `true` and `false` will be show as `1` and `0`.\\ -If mode is `:letter`, `true` and `false` will be show as `T` and `F`. +Changes the way `TruthTable`s are displayed.\\ +The mode argument can be one of these symbols: `:bool` (default), `:bit` or `:letter`.\\ +`:bool` will use the boolean values (`true` and `false`) without formatting.\\ +`:bit` will use `1` and `0` for `true` and `false`, respectively.\\ +`:letter` will use T for `true` and F for `false`. # Examples @@ -57,7 +57,7 @@ TruthTable julia> TruthTables.showmode!() -:default +:bool julia> tt TruthTable @@ -72,13 +72,13 @@ TruthTable ``` """ function showmode!(mode::Symbol) - if mode ∉ (:default, :bit, :letter) - throw(ArgumentError("Invalid show mode, use :default, :bit or :letter.")) + if mode ∉ (:bool, :bit, :letter) + throw(ArgumentError("Invalid show mode, use :bool, :bit or :letter.")) end SHOW_MODE[] = mode end -showmode!() = (SHOW_MODE[] = :default) +showmode!() = (SHOW_MODE[] = :bool) # formatters _bit_formatter(v, i, j) = Int(v) @@ -86,7 +86,7 @@ _letter_formatter(v, i, j) = v ? "T" : "F" function getformatter() mode = SHOW_MODE[] - mode == :default && return nothing + mode == :bool && return nothing mode == :bit && return _bit_formatter mode == :letter && return _letter_formatter return nothing From 0a7c7e09ca3d64aa8dc2c611f578e361889c3cd7 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Wed, 11 May 2022 08:35:18 -0300 Subject: [PATCH 7/8] Add tests --- test/runtests.jl | 85 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 5f58074..9614158 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,7 +1,6 @@ using Test, Tables using TruthTables using TruthTables: TruthTable -using TruthTables: -->, <-->, ∧, ∨, ¬ @testset "TruthTables.jl" begin @testset "TruthTable" begin @@ -72,6 +71,7 @@ using TruthTables: -->, <-->, ∧, ∨, ¬ end @testset "TruthTable show" begin + # show mode: :bool (default) tt = @truthtable p && (q || r) str = """ TruthTable @@ -88,9 +88,48 @@ using TruthTables: -->, <-->, ∧, ∨, ¬ │ false │ false │ false │ false │ └───────┴───────┴───────┴─────────────┘ """ - @test sprint(show, tt) == str + # show mode: :bit + TruthTables.showmode!(:bit) + str = """ + TruthTable + ┌───┬───┬───┬─────────────┐ + │ p │ q │ r │ p ∧ (q ∨ r) │ + ├───┼───┼───┼─────────────┤ + │ 1 │ 1 │ 1 │ 1 │ + │ 0 │ 1 │ 1 │ 0 │ + │ 1 │ 0 │ 1 │ 1 │ + │ 0 │ 0 │ 1 │ 0 │ + │ 1 │ 1 │ 0 │ 1 │ + │ 0 │ 1 │ 0 │ 0 │ + │ 1 │ 0 │ 0 │ 0 │ + │ 0 │ 0 │ 0 │ 0 │ + └───┴───┴───┴─────────────┘ + """ + @test sprint(show, tt) == str + + # show mode: :letter + TruthTables.showmode!(:letter) + str = """ + TruthTable + ┌───┬───┬───┬─────────────┐ + │ p │ q │ r │ p ∧ (q ∨ r) │ + ├───┼───┼───┼─────────────┤ + │ T │ T │ T │ T │ + │ F │ T │ T │ F │ + │ T │ F │ T │ T │ + │ F │ F │ T │ F │ + │ T │ T │ F │ T │ + │ F │ T │ F │ F │ + │ T │ F │ F │ F │ + │ F │ F │ F │ F │ + └───┴───┴───┴─────────────┘ + """ + @test sprint(show, tt) == str + + # show mode: :bool (default) + TruthTables.showmode!() tt = @truthtable p && (q || r) full=true str = """ TruthTable @@ -107,8 +146,48 @@ using TruthTables: -->, <-->, ∧, ∨, ¬ │ false │ false │ false │ false │ false │ └───────┴───────┴───────┴───────┴─────────────┘ """ - @test sprint(show, tt) == str + + # show mode: :bit + TruthTables.showmode!(:bit) + str = """ + TruthTable + ┌───┬───┬───┬───────┬─────────────┐ + │ p │ q │ r │ q ∨ r │ p ∧ (q ∨ r) │ + ├───┼───┼───┼───────┼─────────────┤ + │ 1 │ 1 │ 1 │ 1 │ 1 │ + │ 0 │ 1 │ 1 │ 1 │ 0 │ + │ 1 │ 0 │ 1 │ 1 │ 1 │ + │ 0 │ 0 │ 1 │ 1 │ 0 │ + │ 1 │ 1 │ 0 │ 1 │ 1 │ + │ 0 │ 1 │ 0 │ 1 │ 0 │ + │ 1 │ 0 │ 0 │ 0 │ 0 │ + │ 0 │ 0 │ 0 │ 0 │ 0 │ + └───┴───┴───┴───────┴─────────────┘ + """ + @test sprint(show, tt) == str + + # show mode: :letter + TruthTables.showmode!(:letter) + str = """ + TruthTable + ┌───┬───┬───┬───────┬─────────────┐ + │ p │ q │ r │ q ∨ r │ p ∧ (q ∨ r) │ + ├───┼───┼───┼───────┼─────────────┤ + │ T │ T │ T │ T │ T │ + │ F │ T │ T │ T │ F │ + │ T │ F │ T │ T │ T │ + │ F │ F │ T │ T │ F │ + │ T │ T │ F │ T │ T │ + │ F │ T │ F │ T │ F │ + │ T │ F │ F │ F │ F │ + │ F │ F │ F │ F │ F │ + └───┴───┴───┴───────┴─────────────┘ + """ + @test sprint(show, tt) == str + + @test :bool == TruthTables.showmode!() + @test_throws ArgumentError TruthTables.showmode!(:test) end @testset "Logical operators" begin From 9643c2a431a7c0b921a1344fa22c2bd3834dbc15 Mon Sep 17 00:00:00 2001 From: Elias Carvalho Date: Wed, 11 May 2022 08:47:39 -0300 Subject: [PATCH 8/8] Add more tests --- test/runtests.jl | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 9614158..d42b45d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -71,7 +71,10 @@ using TruthTables: TruthTable end @testset "TruthTable show" begin - # show mode: :bool (default) + # default show mode + @test TruthTables.showmode!() == :bool + + # show mode: :bool tt = @truthtable p && (q || r) str = """ TruthTable @@ -186,7 +189,21 @@ using TruthTables: TruthTable """ @test sprint(show, tt) == str - @test :bool == TruthTables.showmode!() + # getformatter + TruthTables.showmode!(:bit) + @test TruthTables.getformatter() === TruthTables._bit_formatter + TruthTables.showmode!(:letter) + @test TruthTables.getformatter() === TruthTables._letter_formatter + TruthTables.showmode!(:bool) + @test TruthTables.getformatter() === nothing + + # formatters + @test TruthTables._bit_formatter(true, 1, 1) == 1 + @test TruthTables._bit_formatter(false, 1, 1) == 0 + @test TruthTables._letter_formatter(true, 1, 1) == "T" + @test TruthTables._letter_formatter(false, 1, 1) == "F" + + # throws @test_throws ArgumentError TruthTables.showmode!(:test) end