More pyext tests

pull/335/head
A. R. Shajii 2023-03-27 18:23:58 -04:00
parent 1e839ca845
commit be6b4d72da
2 changed files with 141 additions and 4 deletions

View File

@ -29,6 +29,10 @@ class Vec:
def nop():
return 'nop'
@property
def c(self):
return self.a + self.b
def __str__(self):
return f'{self.tag}: <{self.a}, {self.b}>'
@ -41,7 +45,7 @@ class Vec:
def __iadd__(self, other: Vec):
self.a += other.a
self.b += other.b
self.tag = f'({self.tag}+i+{other.tag})'
self.tag = f'({self.tag}+={other.tag})'
return self
def __add__(self, x: float):
@ -62,7 +66,7 @@ class Vec:
def __isub__(self, other: Vec):
self.a -= other.a
self.b -= other.b
self.tag = f'({self.tag}+={other.tag})'
self.tag = f'({self.tag}-={other.tag})'
return self
def __mul__(self, x: float):
@ -194,7 +198,7 @@ class Vec:
def __imatmul__(self, x: float):
self.a *= x
self.b *= x
self.tag = f'({self.tag}@{x})'
self.tag = f'({self.tag}@={x})'
return self
def __len__(self):
@ -269,3 +273,7 @@ class Vec:
def __del__(self):
Vec.d += 1
@property
def nd(self):
return Vec.d

View File

@ -11,6 +11,7 @@ y = m.Vec(100, 1000, tag='y')
z = m.Vec(b=2.2, a=1.1)
s = m.Vec(10)
t = m.Vec(b=11)
r = m.Vec(3, 4)
assert equal(x, 3.14, 4.2, 'x')
assert equal(y, 100, 1000, 'y')
@ -31,7 +32,6 @@ else:
assert str(x) == 'x: <3.14, 4.2>'
assert repr(x) == "Vec(3.14, 4.2, 'x')"
# methods #
###########
@ -104,8 +104,137 @@ else:
assert m.Vec.nop() == 'nop'
assert x.nop() == 'nop'
assert y.c == 1100
# fields #
##########
t.a = 99
assert equal(t, 99, 11, 'v2')
t.tag = 't'
assert equal(t, 99, 11, 't')
# magics #
##########
assert equal(+y, 100, 1000, '(+y)')
assert equal(-y, -100, -1000, '(-y)')
assert equal(~y, -101, -1001, '(~y)')
assert abs(r) == 5.0
assert bool(y)
assert not bool(m.Vec())
assert len(x) == 1
assert len(x + y) == 5
assert hash(y) == 1100
assert equal(x + y, 103.14, 1004.2, '(x+y)')
try:
x + 'x'
except:
pass
else:
assert False
assert equal(x + y + y, 203.14, 2004.2, '((x+y)+y)')
assert equal(y + 50.5, 150.5, 1050.5, '(y+50.5)')
assert equal(y + 50, 150, 1050, '(y++50)')
# assert equal(50.5 + y, 150.5, 1050.5, '(y+50.5)') # support for r-magics?
assert equal(y - x, 96.86, 995.8, '(y-x)')
assert equal(y * 3.5, 350.0, 3500.0, '(y*3.5)')
assert equal(y // 3, 33, 333, '(y//3)')
assert equal(y / 2.5, 40.0, 400.0, '(y/2.5)')
try:
divmod(y, 1)
except ArithmeticError as e:
assert str(e) == 'no divmod'
else:
assert False
assert equal(y % 7, 2, 6, '(y%7)')
assert equal(y ** 2, 10000, 1000000, '(y**2)')
assert equal(y << 1, 200, 2000, '(y<<1)')
assert equal(y >> 2, 25, 250, '(y>>2)')
assert equal(y & 77, 68, 72, '(y&77)')
assert equal(y | 77, 109, 1005, '(y|77)')
assert equal(y ^ 77, 41, 933, '(y^77)')
assert y @ r == 4300
def dup(v):
return m.Vec(v.a, v.b, v.tag + '1')
y1 = dup(y)
y1 += x
assert equal(y1, 103.14, 1004.2, '(y1+=x)')
y1 = dup(y)
y1 += 1.5
assert equal(y1, 101.5, 1001.5, '(y1+=1.5)')
y1 = dup(y)
y1 -= x
assert equal(y1, 96.86, 995.8, '(y1-=x)')
y1 = dup(y)
y1 *= 3.5
assert equal(y1, 350.0, 3500.0, '(y1*=3.5)')
y1 = dup(y)
y1 //= 3
assert equal(y1, 33, 333, '(y1//=3)')
y1 = dup(y)
y1 /= 2.5
assert equal(y1, 40.0, 400.0, '(y1/=2.5)')
y1 = dup(y)
y1 %= 7
assert equal(y1, 2, 6, '(y1%=7)')
y1 = dup(y)
y1 **= 2
assert equal(y1, 10000, 1000000, '(y1**=2)')
y1 = dup(y)
y1 <<= 1
assert equal(y1, 200, 2000, '(y1<<=1)')
y1 = dup(y)
y1 >>= 2
assert equal(y1, 25, 250, '(y1>>=2)')
y1 = dup(y)
y1 &= 77
assert equal(y1, 68, 72, '(y1&=77)')
y1 = dup(y)
y1 |= 77
assert equal(y1, 109, 1005, '(y1|=77)')
y1 = dup(y)
y1 ^= 77
assert equal(y1, 41, 933, '(y1^=77)')
y1 = dup(y)
y1 @= 3.5
assert equal(y1, 350.0, 3500.0, '(y1@=3.5)')
assert equal(y(), 100, 1000, '(y())')
assert x(2.2, 3.3) == (3.14, 2.2, 3.3)
assert y(3.3) == (100, 3.3, 2.22)
assert x(a=2.2, b=3.3) == (3.14, 2.2, 3.3)
assert x(2.2, b=3.3) == (3.14, 2.2, 3.3)
assert x(b=3.3, a=2.2) == (3.14, 2.2, 3.3)
assert x(a=2.2) == (3.14, 2.2, 2.22)
assert x(b=3.3) == (3.14, 1.11, 3.3)
assert y('foo') == (100.0, 1000.0, 'foo')
assert x == x
assert x != y
assert r == m.Vec(3, 4, '?')
assert x < y
assert y > x
assert x <= y
assert y >= x
assert y <= y
assert x >= x
assert list(iter(x)) == ['x']
assert list(iter(x+y+y)) == list('((x+y)+y)')