# Copyright 2019 Google LLC # # 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 # # https://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. """Tests for simple_memoizer.""" import unittest from compiler.util import simple_memoizer class SimpleMemoizerTest(unittest.TestCase): def test_memoized_function_returns_same_values(self): @simple_memoizer.memoize def add_one(n): return n + 1 for i in range(100): self.assertEqual(i + 1, add_one(i)) def test_memoized_function_is_only_called_once(self): arguments = [] @simple_memoizer.memoize def add_one_and_add_argument_to_list(n): arguments.append(n) return n + 1 self.assertEqual(1, add_one_and_add_argument_to_list(0)) self.assertEqual([0], arguments) self.assertEqual(1, add_one_and_add_argument_to_list(0)) self.assertEqual([0], arguments) def test_memoized_function_with_multiple_arguments(self): arguments = [] @simple_memoizer.memoize def sum_arguments_and_add_arguments_to_list(n, m, o): arguments.append((n, m, o)) return n + m + o self.assertEqual(3, sum_arguments_and_add_arguments_to_list(0, 1, 2)) self.assertEqual([(0, 1, 2)], arguments) self.assertEqual(3, sum_arguments_and_add_arguments_to_list(0, 1, 2)) self.assertEqual([(0, 1, 2)], arguments) self.assertEqual(3, sum_arguments_and_add_arguments_to_list(2, 1, 0)) self.assertEqual([(0, 1, 2), (2, 1, 0)], arguments) def test_memoized_function_with_no_arguments(self): arguments = [] @simple_memoizer.memoize def return_one_and_add_empty_tuple_to_list(): arguments.append(()) return 1 self.assertEqual(1, return_one_and_add_empty_tuple_to_list()) self.assertEqual([()], arguments) self.assertEqual(1, return_one_and_add_empty_tuple_to_list()) self.assertEqual([()], arguments) if __name__ == '__main__': unittest.main()