Nano Hash - криптовалюты, майнинг, программирование

Как издеваться над текущим временем в Perl 6?

В Perl 5 можно легко имитировать выполнение скрипта с определенной временной меткой:

BEGIN {
    *CORE::GLOBAL::time = sub () { $::time_mock // CORE::time };
}
use Test;
$::time_mock = 1545667200;
ok is-xmas, 'yay!';
$::time_mock = undef; # back to current time

И это работает глобально — каждый пакет, каждый метод, все, что использует time(), будет видеть отметку времени 1545667200. Что очень удобно для тестирования чувствительной ко времени логики.

Есть ли способ воспроизвести такое поведение в Perl 6?

16.11.2018

Ответы:


1

Вот способ изменить работу термина «сейчас», и вы можете сделать то же самое с «временем» (хотя время возвращает объект Int, а не объект Instant).

&term:<now>.wrap(
    -> |, :$set-mock-time {
        state $mock-time;
        $mock-time = Instant.from-posix($_) with $set-mock-time;
        $mock-time // callsame
});
say now; # Instant:1542374103.625357
sleep 0.5;
say now; # Instant:1542374104.127774
term:<now>(set-mock-time => 12345);
say now; # Instant:12355
sleep 0.5;
say now; # Instant:12355

Кроме того, в зависимости от того, что именно вы хотите сделать, может быть интересен Test::Scheduler: https://github.com/jnthn/p6-test-scheduler

16.11.2018
  • Благодарю вас! Работает отлично. Однако есть одна загвоздка - DateTime.now использует nqp::time_n() под капотом и требует дополнительной обертки (в отличие от Perl 5, где mocking time() было достаточно, чтобы также изменить значение пакета DateTime.now CPAN). 16.11.2018
  • github.com/FCO/test-time делает это, а также использует Test::Schedule 21.11.2018

  • 2

    В экосистеме есть Test::Time (https://github.com/FCO/test-time< /а>)

    20.11.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..