PASTEBIN
| #1 paste tool since 2002
create new paste
tools
api
archive
faq
PASTEBIN
create new paste
trending pastes
sign up
login
my alerts
my settings
my profile
Don't like ads?
PRO users
don't see any ads ;-)
Public Pastes
Untitled
6 sec ago
Untitled
9 sec ago
Untitled
15 sec ago
Untitled
18 sec ago
Es.3 e 4
MatLab | 18 sec ago
Untitled
29 sec ago
Untitled
20 sec ago
Untitled
Java | 22 sec ago
triangles test
By: a guest on
Jul 20th, 2010
| syntax:
Python
| size: 12.13 KB | hits: 22 | expires: Never
download
|
raw
|
embed
|
report abuse
|
print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
import
unittest
,
random
import
triangulo
class
TrianguloGoodInput
(
unittest
.
TestCase
)
:
three_sides =
[
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
60
,
"b"
:
60
,
"c"
:
60
}
)
,
(
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
}
,
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
,
"a"
:
90
,
"b"
:
45
,
"c"
:
45
}
)
,
(
{
'A'
:
100
,
'B'
:
173.20508075688775
,
'C'
:
200
}
,
{
'a'
:
30
,
'A'
:
100
,
'c'
:
90.0
,
'b'
:
60
,
'B'
:
173.20508075688775
,
'C'
:
200.00000000000003
}
)
,
]
two_sides_one_angle_overlapping =
[
(
{
"A"
:
100
,
"B"
:
100
,
"b"
:
60
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
60
,
"b"
:
60
,
"c"
:
60
}
)
,
(
{
"A"
:
100
,
"C"
:
70.71067811865
,
"c"
:
45
}
,
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
,
"a"
:
90
,
"b"
:
45
,
"c"
:
45
}
)
,
(
{
'a'
:
30
,
'A'
:
100
,
'C'
:
200
}
,
{
'a'
:
30
,
'A'
:
100
,
'c'
:
89.999999146226358
,
'b'
:
60.000000853773642
,
'B'
:
173.20508224700384
,
'C'
:
200
}
)
,
]
two_sides_one_angle_non_overlapping =
[
(
{
"A"
:
100
,
"B"
:
100
,
"c"
:
60
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
60
,
"b"
:
60
,
"c"
:
60
}
)
,
(
{
"A"
:
100
,
"C"
:
70.71067811865
,
"b"
:
45
}
,
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
,
"a"
:
90
,
"b"
:
45
,
"c"
:
45
}
)
,
(
{
'A'
:
100
,
'b'
:
60
,
'C'
:
200
}
,
{
'a'
:
30
,
'A'
:
100
,
'c'
:
90.0
,
'b'
:
60
,
'B'
:
173.20508075688775
,
'C'
:
200
}
)
,
]
one_side_two_angles_overlapping =
[
(
{
"A"
:
100
,
"a"
:
60
,
"c"
:
60
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
60
,
"b"
:
60
,
"c"
:
60
}
)
,
(
{
"A"
:
100
,
"a"
:
90
,
"b"
:
45
}
,
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
,
"a"
:
90
,
"b"
:
45
,
"c"
:
45
}
)
,
(
{
'A'
:
100
,
'c'
:
90.0
,
'C'
:
200
}
,
{
'a'
:
30
,
'A'
:
100
,
'c'
:
90.0
,
'b'
:
60
,
'B'
:
173.20508075688775
,
'C'
:
200
}
)
,
]
one_side_two_angles_non_overlapping =
[
(
{
"A"
:
100
,
"b"
:
60
,
"c"
:
60
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
60
,
"b"
:
60
,
"c"
:
60
}
)
,
(
{
"A"
:
100
,
"c"
:
45
,
"b"
:
45
}
,
{
"A"
:
100
,
"B"
:
70.71067811865
,
"C"
:
70.71067811865
,
"a"
:
90
,
"b"
:
45
,
"c"
:45
}
)
,
]
def
test_3_sidesgiven
(
self
)
:
for
input
, expected
in
self
.
three_sides
:
for
element, value
in
triangulo.
get_triangle_values
(
**
input
)
.
iteritems
(
)
:
self
.
assertAlmostEqual
(
value, expected
[
element
]
)
def
test_2_sides_1_angle_non_overlapping
(
self
)
:
for
input
, expected
in
self
.
two_sides_one_angle_non_overlapping
:
for
element, value
in
triangulo.
get_triangle_values
(
**
input
)
.
iteritems
(
)
:
self
.
assertAlmostEqual
(
value, expected
[
element
]
)
def
test_2_sides_1_angle_overlapping
(
self
)
:
for
input
, expected
in
self
.
two_sides_one_angle_overlapping
:
for
element, value
in
triangulo.
get_triangle_values
(
**
input
)
.
iteritems
(
)
:
self
.
assertAlmostEqual
(
value, expected
[
element
]
)
def
test_1_side_2_angles_non_overlapping
(
self
)
:
for
input
, expected
in
self
.
one_side_two_angles_non_overlapping
:
for
element, value
in
triangulo.
get_triangle_values
(
**
input
)
.
iteritems
(
)
:
self
.
assertAlmostEqual
(
value, expected
[
element
]
)
def
test_1_side_2_angles_overlapping
(
self
)
:
for
input
, expected
in
self
.
one_side_two_angles_overlapping
:
for
element, value
in
triangulo.
get_triangle_values
(
**
input
)
.
iteritems
(
)
:
self
.
assertAlmostEqual
(
value, expected
[
element
]
)
def
test_angles
(
self
)
:
"""
No matter the input sides, the sum of the angles must be 180.
"""
for
i
in
range
(
1
)
:
self
.
assertAlmostEqual
(
sum
(
triangulo.
get_known_angles
(
**
triangulo.
get_triangle_values
(
A=
random
.
Random
(
)
.
uniform
(
1,5
)
,
B=
random
.
Random
(
)
.
uniform
(
1,5
)
,
c=
random
.
Random
(
)
.
uniform
(
0,180
)
)
)
.
itervalues
(
)
)
,
180
)
class
TrianguloBadInput
(
unittest
.
TestCase
)
:
bad_sides =
[
{
"A"
:
181
,
"B"
:
90
,
"C"
:
90
}
,
{
"A"
:
90
,
"B"
:
181
,
"C"
:
90
}
,
{
"A"
:
90
,
"B"
:
90
,
"C"
:
181
}
,
{
"A"
:
20
,
"B"
:
120
,
"C"
:
90
}
,
{
"A"
:
90
,
"B"
:
20
,
"C"
:
10
}
,
{
"A"
:
0
,
"B"
:
0
,
"C"
:
1
}
,
]
bad_angles =
[
{
"a"
:
90
,
"b"
:
90
,
"c"
:
90
,
"B"
:
90
,
"C"
:
90
}
,
{
"A"
:
90
,
"B"
:
181
,
"C"
:
90
,
"a"
:
90
,
"b"
:
90
,
"a"
:
90
}
,
]
few_inputs =
[
{
"A"
:
100
,
"B"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
,
{
"A"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"C"
:
100
}
,
{
"a"
:
100
,
"B"
:100
}
,
]
def
test_bad_sides
(
self
)
:
"""
len([i for i in sides if i <= sum(sides)/2]) == 0
"""
for
input
in
self
.
bad_sides
:
self
.
failUnlessRaises
(
triangulo.
InconsistentDataError
, triangulo.
get_triangle_values
,
**
input
)
def
test_bad_angles
(
self
)
:
"""
len([i for i in sides if i <= sum(sides)/2]) == 0
"""
for
input
in
self
.
bad_sides
:
self
.
failUnlessRaises
(
triangulo.
InconsistentDataError
, triangulo.
get_triangle_values
,
**
input
)
def
test_too_few_inputs
(
self
)
:
"""
"""
for
input
in
self
.
few_inputs
:
self
.
failUnlessRaises
(
triangulo.
InsufficientDataError
, triangulo.
get_triangle_values
,
**
input
)
class
KnownSides
(
unittest
.
TestCase
)
:
good_input =
[
#100% coverage might be overkill :)
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"b"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"A"
:
100
,
"c"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"b"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"B"
:
100
,
"c"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"b"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"C"
:
100
,
"c"
:
100
}
,
{
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
}
,
{
"B"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
}
,
{
"A"
:
100
,
"C"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
}
,
{
"A"
:
100
,
"B"
:
100
}
)
,
(
{
"A"
:
100
}
,
{
"A"
:
100
}
)
,
(
{
"B"
:
100
}
,
{
"B"
:
100
}
)
,
(
{
"C"
:
100
}
,
{
"C"
:100
}
)
,
]
def
test_good_input
(
self
)
:
for
input
, expected
in
self
.
good_input
:
self
.
assertEqual
(
triangulo.
get_known_sides
(
**
input
)
, expected
)
class
KnownAngles
(
unittest
.
TestCase
)
:
good_input =
[
#100% coverage might be overkill :)
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"B"
:
100
,
"C"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"A"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"A"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"B"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"B"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"B"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"C"
:
100
,
"b"
:
100
,
"c"
:
100
}
,
{
"b"
:
100
,
"c"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"c"
:
100
}
,
{
"a"
:
100
,
"c"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
,
"b"
:
100
}
,
{
"a"
:
100
,
"b"
:
100
}
)
,
(
{
"C"
:
100
,
"a"
:
100
}
,
{
"a"
:
100
}
)
,
(
{
"C"
:
100
,
"b"
:
100
}
,
{
"b"
:
100
}
)
,
(
{
"C"
:
100
,
"c"
:
100
}
,
{
"c"
:
100
}
)
,
(
{
"A"
:
100
,
"B"
:
100
,
"C"
:
100
}
,
{
}
)
,
(
{
"B"
:
100
,
"C"
:
100
}
,
{
}
)
,
(
{
"A"
:
100
,
"C"
:
100
}
,
{
}
)
,
(
{
"A"
:
100
,
"B"
:
100
}
,
{
}
)
,
(
{
"A"
:
100
}
,
{
}
)
,
(
{
"B"
:
100
}
,
{
}
)
,
(
{
"C"
:100
}
,
{
}
)
,
]
def
test_good_input
(
self
)
:
for
input
, expected
in
self
.
good_input
:
self
.
assertEqual
(
triangulo.
get_known_angles
(
**
input
)
, expected
)
if
__name__ ==
"__main__"
:
unittest
.
main
(
)
create a
new version
of this paste
RAW Paste Data
import unittest, random import triangulo class TrianguloGoodInput(unittest.TestCase): three_sides = [ ({"A":100, "B":100, "C":100}, {"A":100, "B":100, "C":100, "a":60, "b":60, "c":60}), ({"A":100, "B":70.71067811865, "C":70.71067811865}, {"A":100, "B":70.71067811865, "C":70.71067811865, "a":90, "b":45, "c":45}), ({'A': 100, 'B': 173.20508075688775, 'C': 200}, {'a': 30, 'A': 100, 'c': 90.0, 'b': 60, 'B': 173.20508075688775, 'C': 200.00000000000003}), ] two_sides_one_angle_overlapping = [ ({"A":100, "B":100, "b":60}, {"A":100, "B":100, "C":100, "a":60, "b":60, "c":60}), ({"A":100, "C":70.71067811865, "c":45}, {"A":100, "B":70.71067811865, "C":70.71067811865, "a":90, "b":45, "c":45}), ({'a': 30, 'A': 100, 'C': 200}, {'a': 30, 'A': 100, 'c': 89.999999146226358, 'b': 60.000000853773642, 'B': 173.20508224700384, 'C': 200}), ] two_sides_one_angle_non_overlapping = [ ({"A":100, "B":100, "c":60}, {"A":100, "B":100, "C":100, "a":60, "b":60, "c":60}), ({"A":100, "C":70.71067811865, "b":45}, {"A":100, "B":70.71067811865, "C":70.71067811865, "a":90, "b":45, "c":45}), ({'A': 100, 'b': 60, 'C': 200}, {'a': 30, 'A': 100, 'c': 90.0, 'b': 60, 'B': 173.20508075688775, 'C': 200}), ] one_side_two_angles_overlapping = [ ({"A":100, "a":60, "c":60}, {"A":100, "B":100, "C":100, "a":60, "b":60, "c":60}), ({"A":100, "a":90, "b":45}, {"A":100, "B":70.71067811865, "C":70.71067811865, "a":90, "b":45, "c":45}), ({'A': 100, 'c': 90.0, 'C': 200}, {'a': 30, 'A': 100, 'c': 90.0, 'b': 60, 'B': 173.20508075688775, 'C': 200}), ] one_side_two_angles_non_overlapping = [ ({"A":100, "b":60, "c":60}, {"A":100, "B":100, "C":100, "a":60, "b":60, "c":60}), ({"A":100, "c":45, "b":45}, {"A":100, "B":70.71067811865, "C":70.71067811865, "a":90, "b":45, "c":45}), ] def test_3_sidesgiven(self): for input, expected in self.three_sides: for element, value in triangulo.get_triangle_values(**input).iteritems(): self.assertAlmostEqual(value, expected[element]) def test_2_sides_1_angle_non_overlapping(self): for input, expected in self.two_sides_one_angle_non_overlapping: for element, value in triangulo.get_triangle_values(**input).iteritems(): self.assertAlmostEqual(value, expected[element]) def test_2_sides_1_angle_overlapping(self): for input, expected in self.two_sides_one_angle_overlapping: for element, value in triangulo.get_triangle_values(**input).iteritems(): self.assertAlmostEqual(value, expected[element]) def test_1_side_2_angles_non_overlapping(self): for input, expected in self.one_side_two_angles_non_overlapping: for element, value in triangulo.get_triangle_values(**input).iteritems(): self.assertAlmostEqual(value, expected[element]) def test_1_side_2_angles_overlapping(self): for input, expected in self.one_side_two_angles_overlapping: for element, value in triangulo.get_triangle_values(**input).iteritems(): self.assertAlmostEqual(value, expected[element]) def test_angles(self): """ No matter the input sides, the sum of the angles must be 180. """ for i in range(1): self.assertAlmostEqual( sum( triangulo.get_known_angles( **triangulo.get_triangle_values( A=random.Random().uniform(1,5), B=random.Random().uniform(1,5), c=random.Random().uniform(0,180)) ).itervalues()), 180) class TrianguloBadInput(unittest.TestCase): bad_sides = [ {"A":181, "B":90, "C":90}, {"A":90, "B":181, "C":90}, {"A":90, "B":90, "C":181}, {"A":20, "B":120, "C":90}, {"A":90, "B":20, "C":10}, {"A":0, "B":0, "C":1}, ] bad_angles = [ {"a":90, "b":90, "c":90, "B":90, "C":90}, {"A":90, "B":181, "C":90, "a":90, "b":90, "a":90}, ] few_inputs = [ {"A":100, "B":100}, {"A":100, "C":100}, {"B":100, "C":100}, {"A":100, "b":100}, {"A":100, "c":100}, {"a":100, "C":100}, {"a":100, "B":100}, ] def test_bad_sides(self): """ len([i for i in sides if i <= sum(sides)/2]) == 0 """ for input in self.bad_sides: self.failUnlessRaises(triangulo.InconsistentDataError, triangulo.get_triangle_values, **input) def test_bad_angles(self): """ len([i for i in sides if i <= sum(sides)/2]) == 0 """ for input in self.bad_sides: self.failUnlessRaises(triangulo.InconsistentDataError, triangulo.get_triangle_values, **input) def test_too_few_inputs(self): """ """ for input in self.few_inputs: self.failUnlessRaises(triangulo.InsufficientDataError, triangulo.get_triangle_values, **input) class KnownSides(unittest.TestCase): good_input = [ #100% coverage might be overkill :) ({"A":100, "B":100, "C":100, "a":100, "b":100, "c":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "b":100, "c":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "a":100, "c":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "a":100, "b":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "a":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "b":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "C":100, "c":100}, {"A":100, "B":100, "C":100}), ({"A":100, "B":100, "a":100, "b":100, "c":100}, {"A":100, "B":100}), ({"A":100, "B":100, "b":100, "c":100}, {"A":100, "B":100}), ({"A":100, "B":100, "a":100, "c":100}, {"A":100, "B":100}), ({"A":100, "B":100, "a":100, "b":100}, {"A":100, "B":100}), ({"A":100, "B":100, "a":100}, {"A":100, "B":100}), ({"A":100, "B":100, "b":100}, {"A":100, "B":100}), ({"A":100, "B":100, "c":100}, {"A":100, "B":100}), ({"A":100, "C":100, "a":100, "b":100, "c":100}, {"A":100, "C":100}), ({"A":100, "C":100, "b":100, "c":100}, {"A":100, "C":100}), ({"A":100, "C":100, "a":100, "c":100}, {"A":100, "C":100}), ({"A":100, "C":100, "a":100, "b":100}, {"A":100, "C":100}), ({"A":100, "C":100, "a":100}, {"A":100, "C":100}), ({"A":100, "C":100, "b":100}, {"A":100, "C":100}), ({"A":100, "C":100, "c":100}, {"A":100, "C":100}), ({"B":100, "C":100, "a":100, "b":100, "c":100}, {"B":100, "C":100}), ({"B":100, "C":100, "b":100, "c":100}, {"B":100, "C":100}), ({"B":100, "C":100, "a":100, "c":100}, {"B":100, "C":100}), ({"B":100, "C":100, "a":100, "b":100}, {"B":100, "C":100}), ({"B":100, "C":100, "a":100}, {"B":100, "C":100}), ({"B":100, "C":100, "b":100}, {"B":100, "C":100}), ({"B":100, "C":100, "c":100}, {"B":100, "C":100}), ({"A":100, "a":100, "b":100, "c":100}, {"A":100}), ({"A":100, "b":100, "c":100}, {"A":100}), ({"A":100, "a":100, "c":100}, {"A":100}), ({"A":100, "a":100, "b":100}, {"A":100}), ({"A":100, "a":100}, {"A":100}), ({"A":100, "b":100}, {"A":100}), ({"A":100, "c":100}, {"A":100}), ({"B":100, "a":100, "b":100, "c":100}, {"B":100}), ({"B":100, "b":100, "c":100}, {"B":100}), ({"B":100, "a":100, "c":100}, {"B":100}), ({"B":100, "a":100, "b":100}, {"B":100}), ({"B":100, "a":100}, {"B":100}), ({"B":100, "b":100}, {"B":100}), ({"B":100, "c":100}, {"B":100}), ({"C":100, "a":100, "b":100, "c":100}, {"C":100}), ({"C":100, "b":100, "c":100}, {"C":100}), ({"C":100, "a":100, "c":100}, {"C":100}), ({"C":100, "a":100, "b":100}, {"C":100}), ({"C":100, "a":100}, {"C":100}), ({"C":100, "b":100}, {"C":100}), ({"C":100, "c":100}, {"C":100}), ({"A":100, "B":100, "C":100}, {"A":100, "B":100, "C":100}), ({"B":100, "C":100}, {"B":100, "C":100}), ({"A":100, "C":100}, {"A":100, "C":100}), ({"A":100, "B":100}, {"A":100, "B":100}), ({"A":100}, {"A":100}), ({"B":100}, {"B":100}), ({"C":100}, {"C":100}), ] def test_good_input(self): for input, expected in self.good_input: self.assertEqual(triangulo.get_known_sides(**input), expected) class KnownAngles(unittest.TestCase): good_input = [ #100% coverage might be overkill :) ({"A":100, "B":100, "C":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"A":100, "B":100, "C":100, "b":100, "c":100}, {"b":100, "c":100}), ({"A":100, "B":100, "C":100, "a":100, "c":100}, {"a":100, "c":100}), ({"A":100, "B":100, "C":100, "a":100, "b":100}, {"a":100, "b":100}), ({"A":100, "B":100, "C":100, "a":100}, {"a":100}), ({"A":100, "B":100, "C":100, "b":100}, {"b":100}), ({"A":100, "B":100, "C":100, "c":100}, {"c":100}), ({"A":100, "B":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"A":100, "B":100, "b":100, "c":100}, {"b":100, "c":100}), ({"A":100, "B":100, "a":100, "c":100}, {"a":100, "c":100}), ({"A":100, "B":100, "a":100, "b":100}, {"a":100, "b":100}), ({"A":100, "B":100, "a":100}, {"a":100}), ({"A":100, "B":100, "b":100}, {"b":100}), ({"A":100, "B":100, "c":100}, {"c":100}), ({"A":100, "C":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"A":100, "C":100, "b":100, "c":100}, {"b":100, "c":100}), ({"A":100, "C":100, "a":100, "c":100}, {"a":100, "c":100}), ({"A":100, "C":100, "a":100, "b":100}, {"a":100, "b":100}), ({"A":100, "C":100, "a":100}, {"a":100}), ({"A":100, "C":100, "b":100}, {"b":100}), ({"A":100, "C":100, "c":100}, {"c":100}), ({"B":100, "C":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"B":100, "C":100, "b":100, "c":100}, {"b":100, "c":100}), ({"B":100, "C":100, "a":100, "c":100}, {"a":100, "c":100}), ({"B":100, "C":100, "a":100, "b":100}, {"a":100, "b":100}), ({"B":100, "C":100, "a":100}, {"a":100}), ({"B":100, "C":100, "b":100}, {"b":100}), ({"B":100, "C":100, "c":100}, {"c":100}), ({"A":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"A":100, "b":100, "c":100}, {"b":100, "c":100}), ({"A":100, "a":100, "c":100}, {"a":100, "c":100}), ({"A":100, "a":100, "b":100}, {"a":100, "b":100}), ({"A":100, "a":100}, {"a":100}), ({"A":100, "b":100}, {"b":100}), ({"A":100, "c":100}, {"c":100}), ({"B":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"B":100, "b":100, "c":100}, {"b":100, "c":100}), ({"B":100, "a":100, "c":100}, {"a":100, "c":100}), ({"B":100, "a":100, "b":100}, {"a":100, "b":100}), ({"B":100, "a":100}, {"a":100}), ({"B":100, "b":100}, {"b":100}), ({"B":100, "c":100}, {"c":100}), ({"C":100, "a":100, "b":100, "c":100}, {"a":100, "b":100, "c":100}), ({"C":100, "b":100, "c":100}, {"b":100, "c":100}), ({"C":100, "a":100, "c":100}, {"a":100, "c":100}), ({"C":100, "a":100, "b":100}, {"a":100, "b":100}), ({"C":100, "a":100}, {"a":100}), ({"C":100, "b":100}, {"b":100}), ({"C":100, "c":100}, {"c":100}), ({"A":100, "B":100, "C":100}, {}), ({"B":100, "C":100}, {}), ({"A":100, "C":100}, {}), ({"A":100, "B":100}, {}), ({"A":100}, {}), ({"B":100}, {}), ({"C":100}, {}), ] def test_good_input(self): for input, expected in self.good_input: self.assertEqual(triangulo.get_known_angles(**input), expected) if __name__ == "__main__": unittest.main()