Skip to content

Add functions to test properties of default Lua metamethods #33

@ligurio

Description

@ligurio

Lua has a number of default metamethods (Lua 5.3 Manual -> 2.4 – Metatables and Metamethods) that defines an object behaviour for example for default Lua operators. Most of these metamethods can be covered by general properties. For example if a and b have metamethod __eq then (a == b) == (b == a) and (a == b) ~= (a ~= b), for metamethod __lt - (a > b) == (b < a) and so on. I believe it would simplify testing a bit if lua-quickcheck will discover available metamethods and them with such properties.

What do you think, @luc-tielen? I'm ready to spend some time implementing this.

General methods

  • __index - none?
  • __newindex - none?
  • __mode - none?
  • __call - none?
  • __metatable - none?
  • __tostring
type(tostring(a)) == 'string'
  • __len
type(#a) == 'number' 
  • __pairs - none?
  • __ipairs - none?
  • __gc - none?
  • __name
type(a.__name() == 'string'
  • __close

Mathematic Operators

  • __unm
-(-a) == a
  • __add
a + b == b + a
a + 0 == a
  • __sub - none?
  • __mul
a * 2 == a + a
a * 1 == a * 1 * 1
  • __div - none?
  • __idiv - none?
  • __mod
a % b == a - math.floor(a / b) * b
  • __pow
  • __concat - none?

Bitwise Operators

  • __band
(a & (a - 1)) == 0, if a is x^2
  • __bor
a | 0 == a
  • __bxor
a && b == b && a
  • __bnot
~(~a) == a
  • __shl
a << 0 == a
  • __shr
a >> 0 == a

Equivalence Comparison Operators

  • __eq
(a == b) == (b == a)
(a == b) ~= (a ~= b)
  • __lt
(a > b) == (b < a)
  • __le
(a >= b) == (b <= a)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions