Skip to content

Commit 5bb4a7a

Browse files
nielstroncffls
authored andcommitted
Add test for determinism of constructor id
1 parent 586141f commit 5bb4a7a

File tree

1 file changed

+56
-4
lines changed

1 file changed

+56
-4
lines changed

test/pycardano/test_plutus.py

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import copy
2+
import pipes
3+
import subprocess
4+
import sys
5+
import tempfile
26
import unittest
37
from dataclasses import dataclass
48
from test.pycardano.util import check_two_way_cbor
@@ -318,8 +322,8 @@ def test_clone_plutus_data():
318322

319323
assert cloned_vesting != my_vesting
320324

321-
def test_unique_constr_ids():
322325

326+
def test_unique_constr_ids():
323327
@dataclass
324328
class A(PlutusData):
325329
pass
@@ -328,15 +332,19 @@ class A(PlutusData):
328332
class B(PlutusData):
329333
pass
330334

331-
assert A.CONSTR_ID != B.CONSTR_ID, "Different classes (different names) have same default constructor ID"
335+
assert (
336+
A.CONSTR_ID != B.CONSTR_ID
337+
), "Different classes (different names) have same default constructor ID"
332338
B_tmp = B
333339

334340
@dataclass
335341
class B(PlutusData):
336342
a: int
337343
b: bytes
338344

339-
assert B_tmp.CONSTR_ID != B.CONSTR_ID, "Different classes (different fields) have same default constructor ID"
345+
assert (
346+
B_tmp.CONSTR_ID != B.CONSTR_ID
347+
), "Different classes (different fields) have same default constructor ID"
340348

341349
B_tmp = B
342350

@@ -345,4 +353,48 @@ class B(PlutusData):
345353
a: bytes
346354
b: bytes
347355

348-
assert B_tmp.CONSTR_ID != B.CONSTR_ID, "Different classes (different field types) have same default constructor ID"
356+
assert (
357+
B_tmp.CONSTR_ID != B.CONSTR_ID
358+
), "Different classes (different field types) have same default constructor ID"
359+
360+
361+
def test_deterministic_constr_ids_local():
362+
@dataclass
363+
class A(PlutusData):
364+
a: int
365+
b: bytes
366+
367+
A_tmp = A
368+
369+
@dataclass
370+
class A(PlutusData):
371+
a: int
372+
b: bytes
373+
374+
assert (
375+
A_tmp.CONSTR_ID == A.CONSTR_ID
376+
), "Same class has different default constructor ID"
377+
378+
379+
def test_deterministic_constr_ids_global():
380+
code = """
381+
from dataclasses import dataclass
382+
from pycardano import PlutusData
383+
384+
@dataclass
385+
class A(PlutusData):
386+
a: int
387+
b: bytes
388+
389+
print(A.CONSTR_ID)
390+
"""
391+
tmpfile = tempfile.TemporaryFile()
392+
tmpfile.write(code.encode("utf8"))
393+
tmpfile.seek(0)
394+
res = subprocess.run([sys.executable], stdin=tmpfile, capture_output=True).stdout
395+
tmpfile.seek(0)
396+
res2 = subprocess.run([sys.executable], stdin=tmpfile, capture_output=True).stdout
397+
398+
assert (
399+
res == res2
400+
), "Same class has different default constructor id in two consecutive runs"

0 commit comments

Comments
 (0)