| #!/usr/bin/env python3 |
| # Copyright 2022 The Pigweed Authors |
| # |
| # 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 bloaty configuration tooling.""" |
| |
| import unittest |
| |
| from pw_bloat import bloaty_config |
| |
| |
| class BloatyConfigTest(unittest.TestCase): |
| """Tests that the bloaty config tool produces the expected config.""" |
| def test_map_segments_to_memory_regions(self) -> None: |
| """Ensures the mapping works correctly based on a real example.""" |
| segments = { |
| 3: (int(0x800f268), int(0x8100200)), |
| 5: (int(0x20004650), int(0x20020650)), |
| 6: (int(0x20020650), int(0x20030000)), |
| 1: (int(0x8000200), int(0x800f060)), |
| 4: (int(0x20000208), int(0x20004650)), |
| 2: (int(0x20000000), int(0x20000208)), |
| 0: (int(0x8000000), int(0x8000200)), |
| } |
| memory_regions = { |
| 'FLASH': { |
| 0: (int(0x8000200), int(0x8100200)) |
| }, |
| 'RAM': { |
| 0: (int(0x20000000), int(0x20030000)) |
| }, |
| 'VECTOR_TABLE': { |
| 0: (int(0x8000000), int(0x8000200)) |
| }, |
| } |
| expected = { |
| 3: 'FLASH', |
| 5: 'RAM', |
| 6: 'RAM', |
| 1: 'FLASH', |
| 4: 'RAM', |
| 2: 'RAM', |
| 0: 'VECTOR_TABLE', |
| } |
| actual = bloaty_config.map_segments_to_memory_regions( |
| segments=segments, memory_regions=memory_regions) |
| self.assertEqual(expected, actual) |
| |
| def test_generate_memoryregions_data_source(self) -> None: |
| """Ensures the formatted generation works correctly.""" |
| segments_to_memory_regions = { |
| 0: 'RAM', |
| 1: 'RAM', |
| 13: 'FLASH', |
| } |
| config = bloaty_config.generate_memoryregions_data_source( |
| segments_to_memory_regions) |
| expected = '\n'.join(( |
| r'custom_data_source: {', |
| r' name: "memoryregions"', |
| r' base_data_source: "segments"', |
| r' rewrite: {', |
| r' pattern:"^LOAD #0 \\[.*\\]$"', |
| r' replacement:"RAM"', |
| r' }', |
| r' rewrite: {', |
| r' pattern:"^LOAD #1 \\[.*\\]$"', |
| r' replacement:"RAM"', |
| r' }', |
| r' rewrite: {', |
| r' pattern:"^LOAD #13 \\[.*\\]$"', |
| r' replacement:"FLASH"', |
| r' }', |
| r' rewrite: {', |
| r' pattern:".*"', |
| r' replacement:"Not resident in memory"', |
| r' }', |
| r'}', |
| r'', |
| )) |
| self.assertEqual(expected, config) |
| |
| def test_generate_utilization_data_source(self) -> None: |
| config = bloaty_config.generate_utilization_data_source() |
| expected = '\n'.join(( |
| 'custom_data_source: {', |
| ' name:"utilization"', |
| ' base_data_source:"sections"', |
| ' rewrite: {', |
| ' pattern:"unused_space"', |
| ' replacement:"Free space"', |
| ' }', |
| ' rewrite: {', |
| ' pattern:".*"', |
| ' replacement:"Used space"', |
| ' }', |
| '}', |
| '', |
| )) |
| self.assertEqual(expected, config) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |