Add do_call macro, implement Bool builtins, add tests

* I noticed that `fn call(...)` in all objects was identical, so I made
  a macro for it. This should make things a little easier to read, since
  do_call is about 30 lines a pop.
* Bool has a constructor now, and a to_int and to_float implementations
* Add tests for constructors and add new bool tests

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2024-09-30 12:41:13 -07:00
parent b9429d7c19
commit 3d0da0ec85
10 changed files with 240 additions and 78 deletions

72
tests/bool.npp Normal file
View File

@@ -0,0 +1,72 @@
# Bool type operator and function tests
a = true
b = false
# __not__
println("__not__")
println(!a)
println(!!a)
println(!!!a)
println(!!!!a)
println(!b)
println(!!b)
println(!!!b)
println(!!!!b)
# __and__
println("__and__")
println(a && b)
println(b && a)
println(a && a)
println(b && b)
# __or__
println("__or__")
println(a || b)
println(b || a)
println(a || a)
println(b || b)
# __eq__
println("__eq__")
println(a == a)
println(a == b)
println(b == b)
println(b == a)
println(a == true)
println(true == a)
println(a == false)
println(false == a)
println(b == true)
println(true == b)
println(b == false)
println(false == b)
# __ne__
println("__ne__")
println(a != a)
println(a != b)
println(b != b)
println(b != a)
println(a != true)
println(true != a)
println(a != false)
println(false != a)
println(b != true)
println(true != b)
println(b != false)
println(false != b)
# constructor
println("constructor")
println(Bool(""))
println(Bool(0))
println(Bool(0.0))
println(Bool(false))
# This is a fun one. Bool constructor does *not* parse bools, it just checks if they are empty.
println(Bool("false"))
println(Bool("true"))
println(Bool(1))
println(Bool(1.0))
println(Bool(true))

55
tests/bool.npp.expect Normal file
View File

@@ -0,0 +1,55 @@
__not__
false
true
false
true
true
false
true
false
__and__
false
false
true
false
__or__
true
true
true
false
__eq__
true
false
true
false
true
true
false
false
false
false
true
true
__ne__
false
true
false
true
false
false
true
true
true
true
false
false
constructor
false
false
false
false
true
true
true
true
true

View File

@@ -128,3 +128,12 @@ println(-0.0)
println(--0.0)
println(---0.0)
# constructor
println("constructor")
println(Float("10"))
println(Float("10e3"))
println(Float("12e-3"))
println(Float(1234))
println(Float(1.5))
println(Float(true))
println(Float(false))

View File

@@ -96,3 +96,11 @@ __neg__
-0.0
0.0
-0.0
constructor
10.0
10000.0
0.012
1234.0
1.5
1.0
0.0

View File

@@ -123,3 +123,11 @@ println(10 - -20)
println(-10 - 20)
println(-10 - -20)
println(-0xff)
# constructor
println("constructor")
println(Int("10"))
println(Int(1234))
println(Int(1.5))
println(Int(true))
println(Int(false))

View File

@@ -93,3 +93,9 @@ __neg__
-30
10
-255
constructor
10
1234
1
1
0

View File

@@ -33,8 +33,17 @@ println(a + a)
println(a + a + a)
println(a + b)
println(b + a)
# __mul__
println("__mul__")
println(a * 4)
println(b * 5)
println((a * 6).to_repr())
# constructor
println("constructor")
println(Str("asdf"))
println(Str(1234))
println(Str(1.0))
println(Str(true))
println(Str(false))

View File

@@ -24,3 +24,9 @@ __mul__
asdfasdfasdfasdf
This is a longer sentenceThis is a longer sentenceThis is a longer sentenceThis is a longer sentenceThis is a longer sentence
'asdfasdfasdfasdfasdfasdf'
constructor
asdf
1234
1.0
true
false