Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
c1e75e08
Commit
c1e75e08
authored
Oct 22, 2012
by
Александр
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added unittests
parent
c5f6f7ad
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
1 deletions
+85
-1
common/lib/capa/capa/chem/chemtools.py
+85
-1
No files found.
common/lib/capa/capa/chem/chemtools.py
View file @
c1e75e08
from
collections
import
OrderedDict
import
json
import
unittest
def
vsepr_parse_user_answer
(
user_input
):
...
...
@@ -16,13 +17,20 @@ def vsepr_build_correct_answer(geometry, atoms):
def
vsepr_grade
(
user_input
,
correct_answer
,
ignore_p_order
=
False
,
ignore_a_order
=
False
,
ignore_e_order
=
False
):
""" Flags ignore_(a,p,e)_order are for checking order in axial, perepherial or equatorial positions
""" Flags ignore_(a,p,e)_order are for checking order in axial, perepherial or equatorial positions.
Allowed cases:
c0, a, e
c0, p
Not implemented and not tested cases when p with a or e (no need for now)
"""
# print user_input, type(user_input)
# print correct_answer, type(correct_answer)
if
user_input
[
'geometry'
]
!=
correct_answer
[
'geometry'
]:
return
False
if
user_input
[
'atoms'
][
'c0'
]
!=
correct_answer
[
'atoms'
][
'c0'
]:
return
False
# not order-aware comparisons
for
ignore
in
[(
ignore_p_order
,
'p'
),
(
ignore_e_order
,
'e'
),
(
ignore_a_order
,
'a'
)]:
if
ignore
[
0
]:
...
...
@@ -50,3 +58,79 @@ def vsepr_grade(user_input, correct_answer, ignore_p_order=False, ignore_a_order
return
False
return
True
class
Test_Grade
(
unittest
.
TestCase
):
''' test grade function '''
def
test_incorrect_geometry
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX4E0"
,
atoms
=
{
"c0"
:
"N"
,
"p0"
:
"H"
,
"p1"
:
"(ep)"
,
"p2"
:
"H"
,
"p3"
:
"H"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX3E0","atoms":{"c0":"B","p0":"F","p1":"B","p2":"F"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
))
def
test_incorrect_positions
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX4E0"
,
atoms
=
{
"c0"
:
"N"
,
"p0"
:
"H"
,
"p1"
:
"(ep)"
,
"p2"
:
"H"
,
"p3"
:
"H"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX4E0","atoms":{"c0":"B","p0":"F","p1":"B","p2":"F"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
))
def
test_correct_answer
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX4E0"
,
atoms
=
{
"c0"
:
"N"
,
"p0"
:
"H"
,
"p1"
:
"(ep)"
,
"p2"
:
"H"
,
"p3"
:
"H"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX4E0","atoms":{"c0":"N","p0":"H","p1":"(ep)","p2":"H", "p3":"H"}}'
)
self
.
assertTrue
(
vsepr_grade
(
user_answer
,
correct_answer
))
def
test_incorrect_position_order_p
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX4E0"
,
atoms
=
{
"c0"
:
"N"
,
"p0"
:
"H"
,
"p1"
:
"(ep)"
,
"p2"
:
"H"
,
"p3"
:
"H"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX4E0","atoms":{"c0":"N","p0":"H","p1":"H","p2":"(ep)", "p3":"H"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
))
def
test_correct_position_order_with_ignore_p_order
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX4E0"
,
atoms
=
{
"c0"
:
"N"
,
"p0"
:
"H"
,
"p1"
:
"(ep)"
,
"p2"
:
"H"
,
"p3"
:
"H"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX4E0","atoms":{"c0":"N","p0":"H","p1":"H","p2":"(ep)", "p3":"H"}}'
)
self
.
assertTrue
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_p_order
=
True
))
def
test_incorrect_position_order_ae
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"test"
,
"a1"
:
"(ep)"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"(ep)"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"test","a1":"(ep)","e0":"H","e1":"(ep)","e2":"(ep)","e3":"(ep)"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
))
def
test_correct_position_order_with_ignore_a_order_not_e
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"(ep)"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"test","a1":"(ep)","e0":"H","e1":"H","e2":"(ep)","e3":"(ep)"}}'
)
self
.
assertTrue
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_a_order
=
True
))
def
test_incorrect_position_order_with_ignore_a_order_not_e
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"H"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"test","a1":"(ep)","e0":"H","e1":"H","e2":"(ep)","e3":"H"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_a_order
=
True
))
def
test_correct_position_order_with_ignore_e_order_not_a
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"H"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"(ep)","a1":"test","e0":"H","e1":"H","e2":"(ep)","e3":"H"}}'
)
self
.
assertTrue
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_e_order
=
True
))
def
test_incorrect_position_order_with_ignore_e_order__not_a
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"H"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"test","a1":"(ep)","e0":"H","e1":"H","e2":"(ep)","e3":"H"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_e_order
=
True
))
def
test_correct_position_order_with_ignore_ae_order
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"H"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"Br","a0":"test","a1":"(ep)","e0":"H","e1":"H","e2":"(ep)","e3":"H"}}'
)
self
.
assertTrue
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_e_order
=
True
,
ignore_a_order
=
True
))
def
test_incorrect_c0
(
self
):
correct_answer
=
vsepr_build_correct_answer
(
geometry
=
"AX6E0"
,
atoms
=
{
"c0"
:
"Br"
,
"a0"
:
"(ep)"
,
"a1"
:
"test"
,
"e0"
:
"H"
,
"e1"
:
"H"
,
"e2"
:
"H"
,
"e3"
:
"(ep)"
})
user_answer
=
vsepr_parse_user_answer
(
u'{"geometry":"AX6E0","atoms":{"c0":"H","a0":"test","a1":"(ep)","e0":"H","e1":"H","e2":"(ep)","e3":"H"}}'
)
self
.
assertFalse
(
vsepr_grade
(
user_answer
,
correct_answer
,
ignore_e_order
=
True
,
ignore_a_order
=
True
))
def
suite
():
testcases
=
[
Test_Grade
]
suites
=
[]
for
testcase
in
testcases
:
suites
.
append
(
unittest
.
TestLoader
()
.
loadTestsFromTestCase
(
testcase
))
return
unittest
.
TestSuite
(
suites
)
if
__name__
==
"__main__"
:
unittest
.
TextTestRunner
(
verbosity
=
2
)
.
run
(
suite
())
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment