beamdpr 1.0.8

Combine and transform egsphsp (EGS phase space) files for use with BEAMnrc
Documentation
from subprocess import run, PIPE
import filecmp
from unittest import TestCase, main
import os
import math


class BinTestCase(TestCase):
    BASE_DIR = "test_data"

    def test_no_subcommand(self):
        result = run(["cargo", "run", "--", "rotate"], stderr=PIPE, stdout=PIPE)
        self.assertEqual(result.returncode, 2)

    def test_combine_no_args(self):
        result = run(
            ["cargo", "run", "--", "rotate", "combine"], stderr=PIPE, stdout=PIPE
        )
        self.assertEqual(result.returncode, 2)

    def test_combine_one(self):
        input_files = ["test_data/first.egsphsp1"]
        output_file = "test_data/test_combined_output.egsphsp1"
        result = run(
            ["cargo", "run", "--", "combine"] + input_files + ["-o", output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        self.assertTrue(
            filecmp.cmp(output_file, "test_data/first.egsphsp1", shallow=False)
        )

    def test_combine_two(self):
        input_files = ["test_data/first.egsphsp1", "test_data/second.egsphsp1"]
        output_file = "test_data/test_combined_output.egsphsp1"
        result = run(
            ["cargo", "run", "--", "combine"] + input_files + ["-o", output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        self.assertTrue(
            filecmp.cmp(output_file, "test_data/combined.egsphsp1", shallow=False)
        )
        os.remove(output_file)

    def test_translate(self):
        input_file = "test_data/first.egsphsp1"
        output_file = "test_data/test_translate.egsphsp1"
        result = run(
            ["cargo", "run", "--", "translate", input_file, output_file, "-x", "10"]
        )
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "translate", "-i", output_file, "-x", "-10"]
        )
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "compare", input_file, output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        os.remove(output_file)

    def test_rotate(self):
        input_file = "test_data/first.egsphsp1"
        output_file = "test_data/test_rotate.egsphsp1"
        result = run(
            [
                "cargo",
                "run",
                "--",
                "rotate",
                input_file,
                output_file,
                "-a",
                str(math.pi),
            ]
        )
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "rotate", "-i", output_file, "-a", str(math.pi)]
        )
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "compare", input_file, output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        os.remove(output_file)

    def test_reflect(self):
        input_file = "test_data/first.egsphsp1"
        output_file = "test_data/test_reflect.egsphsp1"
        result = run(
            ["cargo", "run", "--", "reflect", input_file, output_file, "-x", "1"]
        )
        self.assertEqual(result.returncode, 0)
        result = run(["cargo", "run", "--", "reflect", "-i", output_file, "-x", "-1"])
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "compare", input_file, output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        os.remove(output_file)

    def _test_reweight(self):
        input_file = "test_data/first.egsphsp1"
        output_file = "test_data/test_reweight.egsphsp1"
        result = run(
            [
                "cargo",
                "run",
                "--",
                "reweight",
                input_file,
                "-o",
                output_file,
                "-r",
                "100",
                "-c",
                "1",
            ]
        )
        self.assertEqual(result.returncode, 0)
        result = run(
            ["cargo", "run", "--", "compare", input_file, output_file],
            stderr=PIPE,
            stdout=PIPE,
        )
        self.assertEqual(result.returncode, 0)
        os.remove(output_file)


if __name__ == "__main__":
    main()