def test(store):
	import os

	from One import One
	from Two import Two

	# Note: Two inherits One

	# Simple creation and insertion
	one = One()
	one.setA('a')
	one.setB('b')
	store.addObject(one)

	two = Two()
	two.setA('1')
	two.setB('2')
	two.setC('3')
	two.setD('4')
	two.setE('a')
	store.addObject(two)

	store.saveChanges()
	store.clear()

	# Fetching
	objs = store.fetchObjectsOfClass(One)
	assert len(objs)==2
	obj = objs[0]
	assert obj.a()=='a'
	assert obj.b()=='b'

	objs = store.fetchObjectsOfClass(One, isDeep=0)
	assert len(objs)==1

	objs = store.fetchObjectsOfClass(One, clauses='where a="1"')
	assert len(objs)==1
	assert objs[0].c()=='3'

	objs = store.fetchObjectsOfClass(One, clauses='where a="2"')
	assert len(objs)==0

	objs = store.fetchObjectsOfClass(Two)
	assert len(objs)==1
	obj = objs[0]
	assert obj.a()=='1'
	assert obj.b()=='2'
	assert obj.c()=='3'
	assert obj.d()=='4'

	# Using fetchObject to fetch individual objects of both base class and subclass
	objs = store.fetchObjectsOfClass(One)
	assert len(objs)==2
	for obj in objs:
		fetchedObj = store.fetchObject(obj.__class__, obj.serialNum())
		assert fetchedObj.__class__ == obj.__class__
		assert fetchedObj.a() == obj.a()

	# Using fetchObjectsOfClass when there are several objects of the base class and subclass
	for i in range(19):        # To make a total of 20 One's
		one = One()
		one.setA('a' + str(i))
		one.setB('b' + str(i))
		store.addObject(one)
	for i in range(14):        # To make a total of 15 Two's
		two = Two()
		two.setA('a' + str(i))
		two.setB('b' + str(i))
		two.setC('c' + str(i))
		two.setD('d' + str(i))
		store.addObject(two)
	store.saveChanges()
	objs = store.fetchObjectsOfClass(One)
	assert len(objs)==35
	objs = store.fetchObjectsOfClass(One, isDeep=0)
	assert len(objs)==20
	objs = store.fetchObjectsOfClass(Two)
	assert len(objs)==15
	objs = store.fetchObjectsOfClass(Two, isDeep=0)
	assert len(objs)==15


