[pypy-commit] pypy default: remove leftover test_cint.py (and higher directories)
wlav
pypy.commits at gmail.com
Mon Jul 31 19:06:16 EDT 2017
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch:
Changeset: r92006:edf12627beaf
Date: 2017-07-31 15:52 -0700
http://bitbucket.org/pypy/pypy/changeset/edf12627beaf/
Log: remove leftover test_cint.py (and higher directories)
diff --git a/pypy/module/cppyy/test/test_cint.py b/pypy/module/cppyy/test/test_cint.py
deleted file mode 100644
--- a/pypy/module/cppyy/test/test_cint.py
+++ /dev/null
@@ -1,710 +0,0 @@
-import py, os, sys
-
-# These tests are for the CINT backend only (they exercise ROOT features
-# and classes that are not loaded/available with the Reflex backend). At
-# some point, these tests are likely covered by the CLang/LLVM backend.
-from pypy.module.cppyy import capi
-if capi.identify() != 'CINT':
- py.test.skip("backend-specific: CINT-only tests")
-
-# load _cffi_backend early, or its global vars are counted as leaks in the
-# test (note that the module is not otherwise used in the test itself)
-from pypy.module._cffi_backend import newtype
-
-currpath = py.path.local(__file__).dirpath()
-iotypes_dct = str(currpath.join("iotypesDict.so"))
-
-def setup_module(mod):
- if sys.platform == 'win32':
- py.test.skip("win32 not supported so far")
- err = os.system("cd '%s' && make CINT=t iotypesDict.so" % currpath)
- if err:
- raise OSError("'make' failed (see stderr)")
-
-class AppTestCINT:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
-
- def test01_globals(self):
- """Test the availability of ROOT globals"""
-
- import cppyy
-
- assert cppyy.gbl.gROOT
- assert cppyy.gbl.gApplication
- assert cppyy.gbl.gSystem
- assert cppyy.gbl.TInterpreter.Instance() # compiled
- assert cppyy.gbl.TInterpreter # interpreted
- assert cppyy.gbl.TDirectory.CurrentDirectory() # compiled
- assert cppyy.gbl.TDirectory # interpreted
-
- def test02_write_access_to_globals(self):
- """Test overwritability of ROOT globals"""
-
- import cppyy
-
- oldval = cppyy.gbl.gDebug
- assert oldval != 3
-
- proxy = cppyy.gbl.__class__.__dict__['gDebug']
- cppyy.gbl.gDebug = 3
- assert proxy.__get__(proxy, None) == 3
-
- # this is where this test differs from test03_write_access_to_globals
- # in test_pythonify.py
- cppyy.gbl.gROOT.ProcessLine('int gDebugCopy = gDebug;')
- assert cppyy.gbl.gDebugCopy == 3
-
- cppyy.gbl.gDebug = oldval
-
- def test03_create_access_to_globals(self):
- """Test creation and access of new ROOT globals"""
-
- import cppyy
-
- cppyy.gbl.gROOT.ProcessLine('double gMyOwnGlobal = 3.1415')
- assert cppyy.gbl.gMyOwnGlobal == 3.1415
-
- proxy = cppyy.gbl.__class__.__dict__['gMyOwnGlobal']
- assert proxy.__get__(proxy, None) == 3.1415
-
- def test04_auto_loading(self):
- """Test auto-loading by retrieving a non-preloaded class"""
-
- import cppyy
-
- l = cppyy.gbl.TLorentzVector()
- assert isinstance(l, cppyy.gbl.TLorentzVector)
-
- def test05_macro_loading(self):
- """Test accessibility to macro classes"""
-
- import cppyy
-
- loadres = cppyy.gbl.gROOT.LoadMacro('simple_class.C')
- assert loadres == 0
-
- base = cppyy.gbl.MySimpleBase
- simple = cppyy.gbl.MySimpleDerived
- simple_t = cppyy.gbl.MySimpleDerived_t
-
- assert issubclass(simple, base)
- assert simple is simple_t
-
- c = simple()
- assert isinstance(c, simple)
- assert c.m_data == c.get_data()
-
- c.set_data(13)
- assert c.m_data == 13
- assert c.get_data() == 13
-
-
-class AppTestCINTPYTHONIZATIONS:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
-
- def test01_strings(self):
- """Test TString/TObjString compatibility"""
-
- import cppyy
-
- pyteststr = "aap noot mies"
- def test_string(s1, s2):
- assert len(s1) == len(s2)
- assert s1 == s1
- assert s1 == s2
- assert s1 == str(s1)
- assert s1 == pyteststr
- assert s1 != "aap"
- assert s1 != ""
- assert s1 < "noot"
- assert repr(s1) == repr(s2)
-
- s1 = cppyy.gbl.TString(pyteststr)
- test_string(s1, pyteststr)
-
- s3 = cppyy.gbl.TObjString(pyteststr)
- test_string(s3, pyteststr)
-
- def test03_TVector(self):
- """Test TVector2/3/T behavior"""
-
- import cppyy, math
-
- N = 51
-
- # TVectorF is a typedef of floats
- v = cppyy.gbl.TVectorF(N)
- for i in range(N):
- v[i] = i*i
-
- assert len(v) == N
- for j in v:
- assert round(v[int(math.sqrt(j)+0.5)]-j, 5) == 0.
-
- def test04_TStringTObjString(self):
- """Test string/TString interchangebility"""
-
- import cppyy
-
- test = "aap noot mies"
-
- s1 = cppyy.gbl.TString(test )
- s2 = str(s1)
-
- assert s1 == test
- assert test == s2
- assert s1 == s2
-
- s3 = cppyy.gbl.TObjString(s2)
- assert s3 == test
- assert s2 == s3
-
- # force use of: TNamed(const TString &name, const TString &title)
- n = cppyy.gbl.TNamed(test, cppyy.gbl.TString("title"))
- assert n.GetTitle() == "title"
- assert n.GetName() == test
-
-
-class AppTestCINTTTREE:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
-
- def setup_class(cls):
- cls.w_N = cls.space.newint(5)
- cls.w_M = cls.space.newint(10)
- cls.w_fname = cls.space.newtext("test.root")
- cls.w_tname = cls.space.newtext("test")
- cls.w_title = cls.space.newtext("test tree")
- cls.w_iotypes = cls.space.appexec([], """():
- import cppyy
- return cppyy.load_reflection_info(%r)""" % (iotypes_dct,))
-
- def test01_write_stdvector(self):
- """Test writing of a single branched TTree with an std::vector<double>"""
-
- from cppyy import gbl # bootstraps, only needed for tests
- from cppyy.gbl import TFile, TTree
- from cppyy.gbl.std import vector
-
- f = TFile(self.fname, "RECREATE")
- mytree = TTree(self.tname, self.title)
- mytree._python_owns = False
-
- v = vector("double")()
- raises(TypeError, TTree.Branch, None, "mydata", v.__class__.__name__, v)
- raises(TypeError, TTree.Branch, v, "mydata", v.__class__.__name__, v)
-
- mytree.Branch("mydata", v.__class__.__name__, v)
-
- for i in range(self.N):
- for j in range(self.M):
- v.push_back(i*self.M+j)
- mytree.Fill()
- v.clear()
- f.Write()
- f.Close()
-
- def test02_file_open(self):
-
- from cppyy import gbl
-
- f = gbl.TFile.Open(self.fname)
- s = str(f) # should not raise
- r = repr(f)
-
- f.Close()
-
- def test03_read_stdvector(self):
- """Test reading of a single branched TTree with an std::vector<double>"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile
-
- f = TFile(self.fname)
- mytree = f.Get(self.tname)
-
- i = 0
- for event in mytree:
- assert len(event.mydata) == self.M
- for entry in event.mydata:
- assert i == int(entry)
- i += 1
- assert i == self.N * self.M
-
- f.Close()
-
- def test04_write_some_data_object(self):
- """Test writing of a complex data object"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile, TTree, IO
- from cppyy.gbl.IO import SomeDataObject
-
- f = TFile(self.fname, "RECREATE")
- mytree = TTree(self.tname, self.title)
-
- d = SomeDataObject()
- b = mytree.Branch("data", d)
- mytree._python_owns = False
- assert b
-
- for i in range(self.N):
- for j in range(self.M):
- d.add_float(i*self.M+j)
- d.add_tuple(d.get_floats())
-
- mytree.Fill()
-
- f.Write()
- f.Close()
-
- def test05_read_some_data_object(self):
- """Test reading of a complex data object"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile
-
- f = TFile(self.fname)
- mytree = f.Get(self.tname)
-
- j = 1
- for event in mytree:
- i = 0
- assert len(event.data.get_floats()) == j*self.M
- for entry in event.data.get_floats():
- assert i == int(entry)
- i += 1
-
- k = 1
- assert len(event.data.get_tuples()) == j
- for mytuple in event.data.get_tuples():
- i = 0
- assert len(mytuple) == k*self.M
- for entry in mytuple:
- assert i == int(entry)
- i += 1
- k += 1
- j += 1
- assert j-1 == self.N
- #
- f.Close()
-
- def test06_branch_activation(self):
- """Test of automatic branch activation"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile, TTree
- from cppyy.gbl.std import vector
-
- L = 5
-
- # writing
- f = TFile(self.fname, "RECREATE")
- mytree = TTree(self.tname, self.title)
- mytree._python_owns = False
-
- for i in range(L):
- v = vector("double")()
- mytree.Branch("mydata_%d"%i, v.__class__.__name__, v)
- mytree.__dict__["v_%d"%i] = v
-
- for i in range(self.N):
- for k in range(L):
- v = mytree.__dict__["v_%d"%k]
- for j in range(self.M):
- mytree.__dict__["v_%d"%k].push_back(i*self.M+j*L+k)
- mytree.Fill()
- for k in range(L):
- v = mytree.__dict__["v_%d"%k]
- v.clear()
- f.Write()
- f.Close()
-
- del mytree, f
- import gc
- gc.collect()
-
- # reading
- f = TFile(self.fname)
- mytree = f.Get(self.tname)
-
- # force (initial) disabling of all branches
- mytree.SetBranchStatus("*",0);
-
- i = 0
- for event in mytree:
- for k in range(L):
- j = 0
- data = getattr(mytree, "mydata_%d"%k)
- assert len(data) == self.M
- for entry in data:
- assert entry == i*self.M+j*L+k
- j += 1
- assert j == self.M
- i += 1
- assert i == self.N
-
- f.Close()
-
- def test07_write_builtin(self):
- """Test writing of builtins"""
-
- from cppyy import gbl # bootstraps, only needed for tests
- from cppyy.gbl import TFile, TTree
- from cppyy.gbl.std import vector
-
- f = TFile(self.fname, "RECREATE")
- mytree = TTree(self.tname, self.title)
- mytree._python_owns = False
-
- import array
- mytree.ba = array.array('c', [chr(0)])
- mytree.ia = array.array('i', [0])
- mytree.da = array.array('d', [0.])
-
- mytree.Branch("my_bool", mytree.ba, "my_bool/O")
- mytree.Branch("my_int", mytree.ia, "my_int/I")
- mytree.Branch("my_int2", mytree.ia, "my_int2/I")
- mytree.Branch("my_double", mytree.da, "my_double/D")
-
- for i in range(self.N):
- # make sure value is different from default (0)
- mytree.ba[0] = i%2 and chr(0) or chr(1)
- mytree.ia[0] = i+1
- mytree.da[0] = (i+1)/2.
- mytree.Fill()
- f.Write()
- f.Close()
-
- def test08_read_builtin(self):
- """Test reading of builtins"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile
-
- f = TFile(self.fname)
- mytree = f.Get(self.tname)
-
- raises(AttributeError, getattr, mytree, "does_not_exist")
-
- i = 1
- for event in mytree:
- assert event.my_bool == (i-1)%2 and 0 or 1
- assert event.my_int == i
- assert event.my_double == i/2.
- i += 1
- assert (i-1) == self.N
-
- f.Close()
-
- def test09_user_read_builtin(self):
- """Test user-directed reading of builtins"""
-
- from cppyy import gbl
- from cppyy.gbl import TFile
-
- f = TFile(self.fname)
- mytree = f.Get(self.tname)
-
- # note, this is an old, annoted tree from test08
- for i in range(3, mytree.GetEntriesFast()):
- mytree.GetEntry(i)
- assert mytree.my_int == i+1
- assert mytree.my_int2 == i+1
-
- f.Close()
-
-class AppTestCINTREGRESSION:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
-
- # these are tests that at some point in the past resulted in failures on
- # PyROOT; kept here to confirm no regression from PyROOT
-
- def test01_regression(self):
- """TPaveText::AddText() used to result in KeyError"""
-
- # This is where the original problem was discovered, and the test is
- # left in. However, the detailed underlying problem, as well as the
- # solution to it, is tested in test_fragile.py
-
- from cppyy import gbl
- from cppyy.gbl import TPaveText
-
- hello = TPaveText( .1, .8, .9, .97 )
- hello.AddText( 'Hello, World!' )
-
-
-class AppTestCINTFUNCTION:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
- _pypytest_leaks = None # TODO: figure out the false positives
-
- # test the function callbacks; this does not work with Reflex, as it can
- # not generate functions on the fly (it might with cffi?)
-
- @py.test.mark.dont_track_allocations("TODO: understand; initialization left-over?")
- def test01_global_function_callback(self):
- """Test callback of a python global function"""
-
- import cppyy, gc
- TF1 = cppyy.gbl.TF1
-
- def identity(x):
- return x[0]
-
- f = TF1("pyf1", identity, -1., 1., 0)
-
- assert f.Eval(0.5) == 0.5
- assert f.Eval(-10.) == -10.
- assert f.Eval(1.0) == 1.0
-
- # check proper propagation of default value
- f = TF1("pyf1d", identity, -1., 1.)
-
- assert f.Eval(0.5) == 0.5
-
- del f # force here, to prevent leak-check complaints
- gc.collect()
-
- def test02_callable_object_callback(self):
- """Test callback of a python callable object"""
-
- import cppyy, gc
- TF1 = cppyy.gbl.TF1
-
- class Linear:
- def __call__(self, x, par):
- return par[0] + x[0]*par[1]
-
- f = TF1("pyf2", Linear(), -1., 1., 2)
- f.SetParameters(5., 2.)
-
- assert f.Eval(-0.1) == 4.8
- assert f.Eval(1.3) == 7.6
-
- del f # force here, to prevent leak-check complaints
- gc.collect()
-
- def test03_fit_with_python_gaussian(self):
- """Test fitting with a python global function"""
-
- # note: this function is dread-fully slow when running testing un-translated
-
- import cppyy, gc, math
- TF1, TH1F = cppyy.gbl.TF1, cppyy.gbl.TH1F
-
- def pygaus(x, par):
- arg1 = 0
- scale1 = 0
- ddx = 0.01
-
- if (par[2] != 0.0):
- arg1 = (x[0]-par[1])/par[2]
- scale1 = (ddx*0.39894228)/par[2]
- h1 = par[0]/(1+par[3])
-
- gauss = h1*scale1*math.exp(-0.5*arg1*arg1)
- else:
- gauss = 0.
- return gauss
-
- f = TF1("pygaus", pygaus, -4, 4, 4)
- f.SetParameters(600, 0.43, 0.35, 600)
-
- h = TH1F("h", "test", 100, -4, 4)
- h.FillRandom("gaus", 200000)
- h.Fit(f, "0Q")
-
- assert f.GetNDF() == 96
- result = f.GetParameters()
- assert round(result[1] - 0., 1) == 0 # mean
- assert round(result[2] - 1., 1) == 0 # s.d.
-
- del f # force here, to prevent leak-check complaints
- gc.collect()
-
-
-class AppTestSURPLUS:
- spaceconfig = dict(usemodules=['cppyy', '_rawffi', 'itertools'])
-
- # these are tests that were historically exercised on ROOT classes and
- # have twins on custom classes; kept here just in case differences crop
- # up between the ROOT classes and the custom ones
-
- def test01_class_enum(self):
- """Test class enum access and values"""
-
- import cppyy
- TObject = cppyy.gbl.TObject
- gROOT = cppyy.gbl.gROOT
-
- assert TObject.kBitMask == gROOT.ProcessLine("return TObject::kBitMask;")
- assert TObject.kIsOnHeap == gROOT.ProcessLine("return TObject::kIsOnHeap;")
- assert TObject.kNotDeleted == gROOT.ProcessLine("return TObject::kNotDeleted;")
- assert TObject.kZombie == gROOT.ProcessLine("return TObject::kZombie;")
-
- t = TObject()
-
- assert TObject.kBitMask == t.kBitMask
- assert TObject.kIsOnHeap == t.kIsOnHeap
- assert TObject.kNotDeleted == t.kNotDeleted
- assert TObject.kZombie == t.kZombie
-
- def test02_global_enum(self):
- """Test global enums access and values"""
-
- import cppyy
- from cppyy import gbl
-
- assert gbl.kRed == gbl.gROOT.ProcessLine("return kRed;")
- assert gbl.kGreen == gbl.gROOT.ProcessLine("return kGreen;")
- assert gbl.kBlue == gbl.gROOT.ProcessLine("return kBlue;")
-
- def test03_copy_contructor(self):
- """Test copy constructor"""
-
- import cppyy
- TLorentzVector = cppyy.gbl.TLorentzVector
-
- t1 = TLorentzVector(1., 2., 3., -4.)
- t2 = TLorentzVector(0., 0., 0., 0.)
- t3 = TLorentzVector(t1)
-
- assert t1 == t3
- assert t1 != t2
-
- for i in range(4):
- assert t1[i] == t3[i]
-
- def test04_object_validity(self):
- """Test object validity checking"""
-
- import cppyy
-
- t1 = cppyy.gbl.TObject()
-
- assert t1
- assert not not t1
-
- t2 = cppyy.gbl.gROOT.FindObject("Nah, I don't exist")
-
- assert not t2
-
- def test05_element_access(self):
- """Test access to elements in matrix and array objects."""
-
- from cppyy import gbl
-
- N = 3
- v = gbl.TVectorF(N)
- m = gbl.TMatrixD(N, N)
-
- for i in range(N):
- assert v[i] == 0.0
-
- for j in range(N):
- assert m[i][j] == 0.0
-
- def test06_static_function_call( self ):
- """Test call to static function."""
-
- import cppyy
- TROOT, gROOT = cppyy.gbl.TROOT, cppyy.gbl.gROOT
-
- c1 = TROOT.Class()
- assert not not c1
-
- c2 = gROOT.Class()
-
- assert c1 == c2
-
- old = gROOT.GetDirLevel()
- TROOT.SetDirLevel(2)
- assert 2 == gROOT.GetDirLevel()
- gROOT.SetDirLevel(old)
-
- old = TROOT.GetDirLevel()
- gROOT.SetDirLevel(3)
- assert 3 == TROOT.GetDirLevel()
- TROOT.SetDirLevel(old)
-
- def test07_macro(self):
- """Test access to cpp macro's"""
-
- from cppyy import gbl
-
- assert gbl.NULL == 0
-
- gbl.gROOT.ProcessLine('#define aap "aap"')
- gbl.gROOT.ProcessLine('#define noot 1')
- gbl.gROOT.ProcessLine('#define mies 2.0')
-
- # TODO: macro's assumed to always be of long type ...
- #assert gbl.aap == "aap"
- assert gbl.noot == 1
- #assert gbl.mies == 2.0
-
- def test08_opaque_pointer_passing(self):
- """Test passing around of opaque pointers"""
-
- import cppyy
-
- # TODO: figure out CObject (see also test_advanced.py)
-
- s = cppyy.gbl.TString("Hello World!")
- #cobj = cppyy.as_cobject(s)
- addr = cppyy.addressof(s)
-
- #assert s == cppyy.bind_object(cobj, s.__class__)
- #assert s == cppyy.bind_object(cobj, "TString")
- assert s == cppyy.bind_object(addr, s.__class__)
- assert s == cppyy.bind_object(addr, "TString")
-
- def test09_object_and_pointer_comparisons(self):
- """Verify object and pointer comparisons"""
-
- import cppyy
- gbl = cppyy.gbl
-
- c1 = cppyy.bind_object(0, gbl.TCanvas)
- assert c1 == None
- assert None == c1
-
- c2 = cppyy.bind_object(0, gbl.TCanvas)
- assert c1 == c2
- assert c2 == c1
-
- # TLorentzVector overrides operator==
- l1 = cppyy.bind_object(0, gbl.TLorentzVector)
- assert l1 == None
- assert None == l1
-
- assert c1 != l1
- assert l1 != c1
-
- l2 = cppyy.bind_object(0, gbl.TLorentzVector)
- assert l1 == l2
- assert l2 == l1
-
- l3 = gbl.TLorentzVector(1, 2, 3, 4)
- l4 = gbl.TLorentzVector(1, 2, 3, 4)
- l5 = gbl.TLorentzVector(4, 3, 2, 1)
- assert l3 == l4
- assert l4 == l3
-
- assert l3 != None # like this to ensure __ne__ is called
- assert None != l3 # id.
- assert l3 != l5
- assert l5 != l3
-
- def test10_recursive_remove(self):
- """Verify that objects are recursively removed when destroyed"""
-
- import cppyy
-
- c = cppyy.gbl.TClass.GetClass("TObject")
-
- o = cppyy.gbl.TObject()
- assert o
-
- o.SetBit(cppyy.gbl.TObject.kMustCleanup)
- c.Destructor(o)
- assert not o
More information about the pypy-commit
mailing list