mirror of https://github.com/exaloop/codon.git
More pyext tests
parent
1e839ca845
commit
be6b4d72da
|
@ -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
|
||||
|
|
|
@ -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)')
|
||||
|
|
Loading…
Reference in New Issue