Представьте многопроцессорную библиотеку в Perl или Ruby

Другая возможность - найти ваш элемент в dom и проверить значение испускаемого корневого компонента.

import { shallowMount } from '@vue/test-utils'
import MyComponent from './MyComponent.vue'
import SubComponent from './SubComponent.vue'

describe('MyComponent', () => {    

  it('should emit baz on subcomponent foo', () => {
    const wrapper = shallowMount(MyComponent)
    const subComponent = wrapper.find(SubComponent)

    expect(subComponent.exists()).toBe(true)
    expect(wrapper.emitted('baz')).toBeUndefined()

    subComponent.vm.$emit('foo', ['hello'])
    expect(wrapper.emitted('baz')[0]).toEqual(['hello'])
    // or expect(wrapper).toEmit('baz', 'hello') cf. below for toEmit
  })

})

Если вы хотите, чтобы пользователь соответствовал Jest:

toEmit(received, eventName, data) {
  if (data) {
    expect(received.emitted()[eventName][0]).toEqual([data])
  } else {
    expect(received.emitted()[eventName][0]).toEqual([])
  }
  return { pass: true }
} 
5
задан Sinan Ünür 19 June 2009 в 03:09
поделиться

3 ответа

С Perl у вас есть возможности. Один из вариантов - использовать процессы, указанные ниже. Мне нужно узнать, как написать аналогичную программу с использованием потоков, но http://perldoc.perl.org/perlthrtut.html должен дать вам представление.

#!/usr/bin/perl

use strict;
use warnings;

use Parallel::ForkManager;

my @data = (0 .. 19);

my $pm = Parallel::ForkManager->new(4);

for my $n ( @data ) {
    my $pid = $pm->start and next;
    warn sprintf "%d^3 = %d\n", $n, slow_cube($n);
    $pm->finish;
}

sub slow_cube {
    my ($n) = @_;

    sleep 1;
    return $n * $n * $n;
}

__END__

Следующая версия с использованием потоков не использует ограничение на количество создаваемых потоков (потому что я не знаю как):

#!/usr/bin/perl

use strict;
use warnings;

use threads;

my @data = (0 .. 19);
my @threads = map { 
    threads->new( {context => 'list' }, \&slow_cube, $_ )
} @data;

for my $thr ( @threads ) {
    my ( $n, $ncubed ) = $thr->join;
    print "$n^3 = $ncubed\n";
}

sub slow_cube {
    my ($n) = @_;

    sleep 1;
    return $n, $n * $n * $n;
}

__END__

Интересно:

TimeThis :  Command Line :  t.pl
TimeThis :  Elapsed Time :  00:00:01.281
9
ответ дан 18 December 2019 в 06:23
поделиться

Ruby:

Perl:

Also, Perl's threads are native operating system threads, so you can just use those to take advantage of multiple cores.

12
ответ дан 18 December 2019 в 06:23
поделиться

Ознакомьтесь с Coro , которые предоставляют сопрограммы для Perl.

Вот отрывок из документации авторов ....

Этот набор модулей управляет продолжениями в целом , чаще всего в форме кооперативных потоков (в документации также называемых coros или просто coro). Они похожи на потоки ядра, но (как правило) не выполняются параллельно одновременно даже на машинах SMP. Особый вид потока, предлагаемый этим модулем, также гарантирует вам, что он не будет переключаться между потоками без необходимости в легко определяемых точках вашей программы, поэтому блокировка и параллельный доступ редко являются проблемой, что делает программирование потоков намного безопаснее и проще, чем использование другие модели потоков.

В отличие от так называемых "потоков Perl" (которые на самом деле не являются реальными потоками, а только эмуляцией процессов Windows, перенесенной на unix, и как таковые действуют как процессы), Coro предоставляет полное общее адресное пространство, что упрощает обмен данными между потоками. И потоки Coro также быстрые: отключение кода эмуляции процесса Windows в вашем Perl и использование Coro может легко привести к увеличению скорости ваших программ в два-четыре раза. Тест параллельного умножения матриц выполняется более чем в 300 раз быстрее на одном ядре, чем псевдопотоки Perl на четырехъядерном ядре, использующем все четыре ядра.


Для чего-то похожего на вышеописанное в Ruby, посмотрите Fiber который поставляется с Ruby 1.9.

Вот две интересные статьи об использовании Fiber:

Существует также Fiber для Perl с использованием Coro. Вот несколько статей о Fiber для Perl (на японском языке):

3
ответ дан 18 December 2019 в 06:23
поделиться