Module grscheller.datastructures.tests.functional_test
Expand source code
# Copyright 2023 Geoffrey R. Scheller
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from grscheller.datastructures.functional import Maybe, Nothing, Some
from grscheller.datastructures.functional import Either, Left, Right
def add2(x):
return x + 2
class TestMaybe:
def test_identity(self):
n1 = Maybe()
n2 = Maybe()
o1 = Maybe(42)
o2 = Maybe(40)
assert o1 is o1
assert o1 is not o2
o3 = o2.map(add2)
assert o3 is not o2
assert o1 is not o3
assert n1 is n1
assert n1 is not n2
assert o1 is not n1
assert n2 is not o2
def test_equality(self):
n1 = Maybe()
n2 = Maybe()
o1 = Maybe(42)
o2 = Maybe(40)
assert o1 == o1
assert o1 != o2
o3 = o2.map(add2)
assert o3 != o2
assert o1 == o3
assert n1 == n1
assert n1 == n2
assert o1 != n1
assert n2 != o2
def test_iterate(self):
o1 = Maybe(38)
o2 = o1.map(add2).map(add2)
n1 = Maybe()
l1 = []
l2 = []
for v in n1:
l1.append(v)
for v in o2:
l2.append(v)
assert len(l1) == 0
assert len(l2) == 1
assert l2[0] == 42
def test_get(self):
o1 = Maybe(1)
n1 = Maybe()
assert o1.getOrElse(42) == 1
assert n1.getOrElse(42) == 42
assert o1.get() == 1
assert n1.get() is None
assert n1.get() == None
assert n1.getOrElse(13) == (10 + 3)
assert n1.getOrElse(10/7) == (10/7)
def test_nothing(self):
o1 = Maybe(42)
n1 = Maybe()
n2 = n1
assert o1 != Nothing
assert n1 == Nothing
assert n1 is n1
assert n1 is n2
class TestEither:
def test_identity(self):
e1 = Left(42)
e2 = Left(42)
e3 = Right('not 42')
e4 = Right('not 42')
e5 = Right('also not 42')
e6 = e3.copy()
e7 = e3
e8 = e1.copy()
assert e1 is e1
assert e1 is not e2
assert e1 is not e3
assert e1 is not e4
assert e1 is not e5
assert e1 is not e6
assert e1 is not e7
assert e1 is not e8
assert e2 is e2
assert e2 is not e3
assert e2 is not e4
assert e2 is not e5
assert e2 is not e6
assert e2 is not e7
assert e2 is not e8
assert e3 is e3
assert e3 is not e4
assert e3 is not e5
assert e3 is not e6
assert e3 is e7
assert e3 is not e8
assert e4 is e4
assert e4 is not e5
assert e4 is not e6
assert e4 is not e7
assert e4 is not e8
assert e5 is e5
assert e5 is not e6
assert e5 is not e7
assert e5 is not e8
assert e6 is e6
assert e6 is not e7
assert e6 is not e8
assert e7 is e7
assert e7 is not e8
assert e8 is e8
def test_equality(self):
e1 = Left(42)
e2 = Left(42)
e3 = Right('not 42')
e4 = Right('not 42')
e5 = Right('also not 42')
e6 = e3.copy()
e7 = e3
e8 = e1.copy()
assert e1 == e1
assert e1 == e2
assert e1 != e3
assert e1 != e4
assert e1 != e5
assert e1 != e6
assert e1 != e7
assert e1 == e8
assert e2 == e2
assert e2 != e3
assert e2 != e4
assert e2 != e5
assert e2 != e6
assert e2 != e7
assert e2 == e8
assert e3 == e3
assert e3 == e4
assert e3 != e5
assert e3 == e6
assert e3 == e7
assert e3 != e8
assert e4 == e4
assert e4 != e5
assert e4 == e6
assert e4 == e7
assert e4 != e8
assert e5 == e5
assert e5 != e6
assert e5 != e7
assert e5 != e8
assert e6 == e6
assert e6 == e7
assert e6 != e8
assert e7 == e7
assert e7 != e8
assert e8 == e8
Functions
def add2(x)
-
Expand source code
def add2(x): return x + 2
Classes
class TestEither
-
Expand source code
class TestEither: def test_identity(self): e1 = Left(42) e2 = Left(42) e3 = Right('not 42') e4 = Right('not 42') e5 = Right('also not 42') e6 = e3.copy() e7 = e3 e8 = e1.copy() assert e1 is e1 assert e1 is not e2 assert e1 is not e3 assert e1 is not e4 assert e1 is not e5 assert e1 is not e6 assert e1 is not e7 assert e1 is not e8 assert e2 is e2 assert e2 is not e3 assert e2 is not e4 assert e2 is not e5 assert e2 is not e6 assert e2 is not e7 assert e2 is not e8 assert e3 is e3 assert e3 is not e4 assert e3 is not e5 assert e3 is not e6 assert e3 is e7 assert e3 is not e8 assert e4 is e4 assert e4 is not e5 assert e4 is not e6 assert e4 is not e7 assert e4 is not e8 assert e5 is e5 assert e5 is not e6 assert e5 is not e7 assert e5 is not e8 assert e6 is e6 assert e6 is not e7 assert e6 is not e8 assert e7 is e7 assert e7 is not e8 assert e8 is e8 def test_equality(self): e1 = Left(42) e2 = Left(42) e3 = Right('not 42') e4 = Right('not 42') e5 = Right('also not 42') e6 = e3.copy() e7 = e3 e8 = e1.copy() assert e1 == e1 assert e1 == e2 assert e1 != e3 assert e1 != e4 assert e1 != e5 assert e1 != e6 assert e1 != e7 assert e1 == e8 assert e2 == e2 assert e2 != e3 assert e2 != e4 assert e2 != e5 assert e2 != e6 assert e2 != e7 assert e2 == e8 assert e3 == e3 assert e3 == e4 assert e3 != e5 assert e3 == e6 assert e3 == e7 assert e3 != e8 assert e4 == e4 assert e4 != e5 assert e4 == e6 assert e4 == e7 assert e4 != e8 assert e5 == e5 assert e5 != e6 assert e5 != e7 assert e5 != e8 assert e6 == e6 assert e6 == e7 assert e6 != e8 assert e7 == e7 assert e7 != e8 assert e8 == e8
Methods
def test_equality(self)
-
Expand source code
def test_equality(self): e1 = Left(42) e2 = Left(42) e3 = Right('not 42') e4 = Right('not 42') e5 = Right('also not 42') e6 = e3.copy() e7 = e3 e8 = e1.copy() assert e1 == e1 assert e1 == e2 assert e1 != e3 assert e1 != e4 assert e1 != e5 assert e1 != e6 assert e1 != e7 assert e1 == e8 assert e2 == e2 assert e2 != e3 assert e2 != e4 assert e2 != e5 assert e2 != e6 assert e2 != e7 assert e2 == e8 assert e3 == e3 assert e3 == e4 assert e3 != e5 assert e3 == e6 assert e3 == e7 assert e3 != e8 assert e4 == e4 assert e4 != e5 assert e4 == e6 assert e4 == e7 assert e4 != e8 assert e5 == e5 assert e5 != e6 assert e5 != e7 assert e5 != e8 assert e6 == e6 assert e6 == e7 assert e6 != e8 assert e7 == e7 assert e7 != e8 assert e8 == e8
def test_identity(self)
-
Expand source code
def test_identity(self): e1 = Left(42) e2 = Left(42) e3 = Right('not 42') e4 = Right('not 42') e5 = Right('also not 42') e6 = e3.copy() e7 = e3 e8 = e1.copy() assert e1 is e1 assert e1 is not e2 assert e1 is not e3 assert e1 is not e4 assert e1 is not e5 assert e1 is not e6 assert e1 is not e7 assert e1 is not e8 assert e2 is e2 assert e2 is not e3 assert e2 is not e4 assert e2 is not e5 assert e2 is not e6 assert e2 is not e7 assert e2 is not e8 assert e3 is e3 assert e3 is not e4 assert e3 is not e5 assert e3 is not e6 assert e3 is e7 assert e3 is not e8 assert e4 is e4 assert e4 is not e5 assert e4 is not e6 assert e4 is not e7 assert e4 is not e8 assert e5 is e5 assert e5 is not e6 assert e5 is not e7 assert e5 is not e8 assert e6 is e6 assert e6 is not e7 assert e6 is not e8 assert e7 is e7 assert e7 is not e8 assert e8 is e8
class TestMaybe
-
Expand source code
class TestMaybe: def test_identity(self): n1 = Maybe() n2 = Maybe() o1 = Maybe(42) o2 = Maybe(40) assert o1 is o1 assert o1 is not o2 o3 = o2.map(add2) assert o3 is not o2 assert o1 is not o3 assert n1 is n1 assert n1 is not n2 assert o1 is not n1 assert n2 is not o2 def test_equality(self): n1 = Maybe() n2 = Maybe() o1 = Maybe(42) o2 = Maybe(40) assert o1 == o1 assert o1 != o2 o3 = o2.map(add2) assert o3 != o2 assert o1 == o3 assert n1 == n1 assert n1 == n2 assert o1 != n1 assert n2 != o2 def test_iterate(self): o1 = Maybe(38) o2 = o1.map(add2).map(add2) n1 = Maybe() l1 = [] l2 = [] for v in n1: l1.append(v) for v in o2: l2.append(v) assert len(l1) == 0 assert len(l2) == 1 assert l2[0] == 42 def test_get(self): o1 = Maybe(1) n1 = Maybe() assert o1.getOrElse(42) == 1 assert n1.getOrElse(42) == 42 assert o1.get() == 1 assert n1.get() is None assert n1.get() == None assert n1.getOrElse(13) == (10 + 3) assert n1.getOrElse(10/7) == (10/7) def test_nothing(self): o1 = Maybe(42) n1 = Maybe() n2 = n1 assert o1 != Nothing assert n1 == Nothing assert n1 is n1 assert n1 is n2
Methods
def test_equality(self)
-
Expand source code
def test_equality(self): n1 = Maybe() n2 = Maybe() o1 = Maybe(42) o2 = Maybe(40) assert o1 == o1 assert o1 != o2 o3 = o2.map(add2) assert o3 != o2 assert o1 == o3 assert n1 == n1 assert n1 == n2 assert o1 != n1 assert n2 != o2
def test_get(self)
-
Expand source code
def test_get(self): o1 = Maybe(1) n1 = Maybe() assert o1.getOrElse(42) == 1 assert n1.getOrElse(42) == 42 assert o1.get() == 1 assert n1.get() is None assert n1.get() == None assert n1.getOrElse(13) == (10 + 3) assert n1.getOrElse(10/7) == (10/7)
def test_identity(self)
-
Expand source code
def test_identity(self): n1 = Maybe() n2 = Maybe() o1 = Maybe(42) o2 = Maybe(40) assert o1 is o1 assert o1 is not o2 o3 = o2.map(add2) assert o3 is not o2 assert o1 is not o3 assert n1 is n1 assert n1 is not n2 assert o1 is not n1 assert n2 is not o2
def test_iterate(self)
-
Expand source code
def test_iterate(self): o1 = Maybe(38) o2 = o1.map(add2).map(add2) n1 = Maybe() l1 = [] l2 = [] for v in n1: l1.append(v) for v in o2: l2.append(v) assert len(l1) == 0 assert len(l2) == 1 assert l2[0] == 42
def test_nothing(self)
-
Expand source code
def test_nothing(self): o1 = Maybe(42) n1 = Maybe() n2 = n1 assert o1 != Nothing assert n1 == Nothing assert n1 is n1 assert n1 is n2