Library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package ilos_sim_pkg is procedure clk_gen( signal clk : out std_logic; constant FREQ : real; PHASE : time := 0 fs; signal run : std_logic ); end package ilos_sim_pkg; package body ilos_sim_pkg is -- Advanced procedure for clock generation, with period adjust to match frequency over time, and run control by signal procedure clk_gen(signal clk : out std_logic; constant FREQ : real; PHASE : time := 0 fs; signal run : std_logic) is constant HIGH_TIME : time := 0.5 sec / FREQ; -- High time as fixed value variable low_time_v : time; -- Low time calculated per cycle; always >= HIGH_TIME variable cycles_v : real := 0.0; -- Number of cycles variable freq_time_v : time := 0 fs; -- Time used for generation of cycles begin -- Check the arguments assert (HIGH_TIME /= 0 fs) report "clk_gen: High time is zero; time resolution to large for frequency" severity FAILURE; -- Initial phase shift clk <= '0'; wait for PHASE; -- Generate cycles loop -- Only high pulse if run is '1' or 'H' if (run = '1') or (run = 'H') then clk <= run; end if; wait for HIGH_TIME; -- Low part of cycle clk <= '0'; low_time_v := 1 sec * ((cycles_v + 1.0) / FREQ) - freq_time_v - HIGH_TIME; -- + 1.0 for cycle after current wait for low_time_v; -- Cycle counter and time passed update cycles_v := cycles_v + 1.0; freq_time_v := freq_time_v + HIGH_TIME + low_time_v; end loop; end procedure; end package body ilos_sim_pkg;extpnr/commit/3rdparty/pybind11/tests/test_eval.cpp?id=fa1ef15e47f7ee0b36a77f94ea26f92e2a8a689d'>commitdiffstats
path: root/3rdparty/pybind11/tests/test_eval.cpp
blob: 5416c2ec4d8045c5979fa8616f22a4cff55d3032 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
    tests/test_eval.cpp -- Usage of eval() and eval_file()

    Copyright (c) 2016 Klemens D. Morgenstern

    All rights reserved. Use of this source code is governed by a
    BSD-style license that can be found in the LICENSE file.
*/


#include <pybind11/eval.h>
#include "pybind11_tests.h"

TEST_SUBMODULE(eval_, m) {
    // test_evals

    auto global = py::dict(py::module_::import("__main__").attr("__dict__"));

    m.def("test_eval_statements", [global]() {
        auto local = py::dict();
        local["call_test"] = py::cpp_function([&]() -> int {
            return 42;
        });

        // Regular string literal
        py::exec(
            "message = 'Hello World!'\n"
            "x = call_test()",
            global, local
        );

        // Multi-line raw string literal
        py::exec(R"(
            if x == 42:
                print(message)
            else:
                raise RuntimeError
            )", global, local
        );
        auto x = local["x"].cast<int>();

        return x == 42;
    });

    m.def("test_eval", [global]() {
        auto local = py::dict();
        local["x"] = py::int_(42);
        auto x = py::eval("x", global, local);
        return x.cast<int>() == 42;
    });

    m.def("test_eval_single_statement", []() {
        auto local = py::dict();
        local["call_test"] = py::cpp_function([&]() -> int {
            return 42;
        });

        auto result = py::eval<py::eval_single_statement>("x = call_test()", py::dict(), local);
        auto x = local["x"].cast<int>();
        return result.is_none() && x == 42;
    });

    m.def("test_eval_file", [global](py::str filename) {
        auto local = py::dict();
        local["y"] = py::int_(43);

        int val_out;
        local["call_test2"] = py::cpp_function([&](int value) { val_out = value; });

        auto result = py::eval_file(filename, global, local);
        return val_out == 43 && result.is_none();
    });

    m.def("test_eval_failure", []() {
        try {
            py::eval("nonsense code ...");
        } catch (py::error_already_set &) {
            return true;
        }
        return false;
    });

    m.def("test_eval_file_failure", []() {
        try {
            py::eval_file("non-existing file");
        } catch (std::exception &) {
            return true;
        }
        return false;
    });

    // test_eval_empty_globals
    m.def("eval_empty_globals", [](py::object global) {
        if (global.is_none())
            global = py::dict();
        auto int_class = py::eval("isinstance(42, int)", global);
        return global;
    });
}