Юнит-тестирование Lua-кода при помощи TAP. Илья Чесноков
|
|
- Vanessa Porter
- 5 years ago
- Views:
Transcription
1 Юнит-тестирование Lua-кода при помощи TAP Илья Чесноков
2 Все началось...!2
3 С маленькой программки на Lua!3
4 ...несколько юнит-тестов...!4
5 lua-testmore!5
6 Test Anything Protocol (TAP)!6
7 Test Anything Protocol (TAP) Текстовый интерфейс между тестовыми модулями и средой Во многих ЯП есть библиотеки для генерации Потребляется большинством CI-систем!7
8 TAP output 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!8
9 TAP output: test plan 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!9
10 TAP output: test result 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!10
11 TAP output: test number 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!11
12 TAP output: description 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!12
13 TAP output: directives 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet!13
14 To plan or not to plan?!14
15 t/plan2.lua #!/usr/bin/env lua require 'Test.More' plan(2) pass('first test') pass('second test') pass('third test')!15
16 t/plan2.lua #!/usr/bin/env lua require 'Test.More' plan(2) pass('first test') pass('second test') pass('third test')!16
17 t/plan2.lua #!/usr/bin/env lua require 'Test.More' plan(2) pass('first test') pass('second test') pass('third test')!17
18 lua t/plan2.lua 1..2 ok 1 - First test ok 2 - Second test ok 3 - Third test!18
19 prove -vm t/plan2.lua t/plan2.lua ok 1 - First test ok 2 - Second test ok 3 - Third test All 2 subtests passed Test Summary Report t/plan2.lua (Wstat: 0 Tests: 3 Failed: 1) Failed test: 3 Parse errors: Bad plan. You planned 2 tests but ran 3. Files=1, Tests=3, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!19
20 prove -vm t/plan2.lua t/plan2.lua ok 1 - First test ok 2 - Second test ok 3 - Third test All 2 subtests passed Test Summary Report t/plan2.lua (Wstat: 0 Tests: 3 Failed: 1) Failed test: 3 Parse errors: Bad plan. You planned 2 tests but ran 3. Files=1, Tests=3, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!20
21 t/done_testing.lua require 'Test.More' pass('first test') pass('second test') pass('third test') done_testing()!21
22 prove -vm t/done_testing.lua t/plan2.lua.. ok 1 - First test ok 2 - Second test ok 3 - Third test 1..3 ok All tests successful. Files=1, Tests=3, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: PASS!22
23 Директива TODO!23
24 t/todo.lua require 'Test.More' pass('passing test') todo('will fix later', 1) fail('failing test') done_testing()!24
25 prove -vm t/todo.lua t/todo.lua.. ok 1 - Passing test not ok 2 - Failing test # TODO Will fix later # Failed (TODO) test (t/todo.lua at line 7) 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.04 usr sys = 0.05 CPU) Result: PASS!25
26 prove -vm t/todo.lua t/todo.lua.. ok 1 - Passing test not ok 2 - Failing test # TODO Will fix later # Failed (TODO) test (t/todo.lua at line 7) 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.04 usr sys = 0.05 CPU) Result: PASS!26
27 prove -vm t/todo.lua t/todo.lua.. ok 1 - Passing test not ok 2 - Failing test # TODO Will fix later # Failed (TODO) test (t/todo.lua at line 7) 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.04 usr sys = 0.05 CPU) Result: PASS!27
28 Директива SKIP!28
29 t/skip_all.lua require 'Test.More' local Redis = require 'redis' if not pcall(redis.connect) then skip_all('redis is not available') end done_testing()!29
30 t/skip_all.lua require 'Test.More' local Redis = require 'redis' if not pcall(redis.connect) then skip_all('redis is not available') end done_testing()!30
31 prove -vm t/skip_all.lua t/skip_all.lua.. skipped: Redis is not available Files=1, Tests=0, 0 wallclock secs ( 0.01 usr sys = 0.01 CPU) Result: NOTESTS!31
32 prove -vm t/skip_all.lua t/skip_all.lua.. skipped: Redis is not available Files=1, Tests=0, 0 wallclock secs ( 0.01 usr sys = 0.01 CPU) Result: NOTESTS!32
33 testanything.org!33
34 Test.More!34
35 Test.More asserts ok(got, title) - проверка на true is(got, expected, title) - проверка got == expected like(got, pattern, title) - проверка на regex cmp_ok(this, op, that, title) - сравнение оператором op и др.!35
36 Test.More asserts ok(got, title) - проверка на true is(got, expected, title) - проверка got == expected like(got, pattern, title) - проверка на regex cmp_ok(this, op, that, title) - сравнение оператором op и др.!36
37 Пример: lib/adder.lua return { -- add() - sums up 2 numbers and returns result add = function(x, y) return x + y end }!37
38 t/adder.lua -- Export all the Test.More functions as globals require('test.more') local adder = require('adder') plan(2) -- Plan 2 tests is(adder.add(2.0001, ), 4, ' == 4') is(adder.add(1e100, 2e100), 3e100, '1e e100 == 3e100')!38
39 t/adder.lua -- Export all the Test.More functions as globals require('test.more') local adder = require('adder') plan(2) -- Plan 2 tests is(adder.add(2.0001, ), 4, ' == 4') is(adder.add(1e100, 2e100), 3e100, '1e e100 == 3e100')!39
40 t/adder.lua -- Export all the Test.More functions as globals require('test.more') local adder = require('adder') plan(2) -- Plan 2 tests is(adder.add(2.0001, ), 4, ' == 4') is(adder.add(1e100, 2e100), 3e100, '1e e100 == 3e100')!40
41 t/adder.lua -- Export all the Test.More functions as globals require('test.more') local adder = require('adder') plan(2) -- Plan 2 tests is(adder.add(2.0001, ), 4, ' == 4') is(adder.add(1e100, 2e100), 3e100, '1e e100 == 3e100')!41
42 prove -vm t/adder.lua!42
43 t/adder.lua ok == 4 not ok 2-1e e100 == 3e100 # Failed test (t/adder.lua at line 10) # got: 3e+100 # expected: 3e+100 Failed 1/2 subtests Test Summary Report t/adder.lua (Wstat: 0 Tests: 2 Failed: 1) Failed test: 2 Files=1, Tests=2, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!43
44 Программа выросла: больше юнит-тестов!44
45 Пожелания для юнит-тестирования Структуризация Один класс / модуль один тестовый файл Один метод класса один тестовый метод Повторное использование кода в ООП-стиле Возможность подготовки / очистки тестовых данных Запуск тестов для отдельного класса / метода!45
46 Лаконичные assert-ы Структуризация Наследование Подготовка/ очистка данных Выборочный запуск Test.More!46
47 Lua-фреймворки Busted LuaUnit Telescope, lunit,...
48 Busted!48
49 Busted asserts: luassert assert.is_true(got), assert.is_not.true(got),... assert.are.equal(expected, got),... assert.has.errors(function() error("this should fail") end)...!49
50 Busted asserts: luassert Можно добавлять свои assert-ы Поддерживаются моки, асинхронные тесты и т.д.!50
51 busted/adder_spec.lua require('busted.runner')() local adder = require('adder') local assert = require('luassert') describe("function add()", function() it('can add and ', function() end) assert.are.equal(4, adder.add(2.0001, )) it('can add 1e100 and 2e100', function() assert.are.equal(3e100, adder.add(1e100, 2e100)) end) end)!51
52 busted/adder_spec.lua require('busted.runner')() local adder = require('adder') local assert = require('luassert') describe("function add()", function() it('can add and ', function() end) assert.are.equal(4, adder.add(2.0001, )) it('can add 1e100 and 2e100', function() assert.are.equal(3e100, adder.add(1e100, 2e100)) end) end)!52
53 busted/adder_spec.lua require('busted.runner')() local adder = require('adder') local assert = require('luassert') describe("function add()", function() it('can add and ', function() end) assert.are.equal(4, adder.add(2.0001, )) it('can add 1e100 and 2e100', function() assert.are.equal(3e100, adder.add(1e100, 2e100)) end) end)!53
54 .busted return { _all = { output = 'TAP', }, }!54
55 prove -vm busted/adder_spec.lua!55
56 busted/adder_spec.lua.. ok 1 - Function add() can add and not ok 2 - Function add() can add 1e100 and 2e100 # 13 # Failure message: busted/adder_spec.lua:14: Expected objects to be equal. # Passed in: # (number) e+100 # Expected: # (number) e Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests Test Summary Report busted/adder_spec.lua (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.00 sys cusr 0.01 csys = 0 CPU) Result: FAIL!56
57 busted/adder_spec.lua.. ok 1 - Function add() can add and not ok 2 - Function add() can add 1e100 and 2e100 # 13 # Failure message: busted/adder_spec.lua:14: Expected objects to be equal. # Passed in: # (number) e+100 # Expected: # (number) e Dubious, test returned 1 (wstat 256, 0x100) Failed 1/2 subtests Test Summary Report busted/adder_spec.lua (Wstat: 256 Tests: 2 Failed: 1) Failed test: 2 Non-zero exit status: 1 Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.00 sys cusr 0.01 csys = 0 CPU) Result: FAIL!57
58 Лаконичные assert-ы Структуризация Наследование Подготовка/ очистка данных Выборочный запуск Test.More Busted!58
59 LuaUnit!59
60 LuaUnit asserts assert_true(value) / assert_false(value) assert_nil(value) / assert_not_nil(value) assert_equals(actual, expected) / assert_not_equals(actual, expected) assert_str_contains(str, sub, [, usere])...!60
61 luaunit/tests/testadder.lua -- Global table! TestAdder = {} local adder = require('adder') function TestAdder:test_add() assert_equals(adder.add(2.0001, ), 4) assert_equals(adder.add(1e100, 2e100), 3e100) end!61
62 luaunit/run_tests.lua EXPORT_ASSERT_TO_GLOBALS = true local luaunit = require('luaunit') -- Load test library require('testadder') lu = luaunit.luaunit.new() lu:setoutputtype('tap') lu:runsuite()!62
63 prove -vm luaunit/run_tests.lua!63
64 luaunit/run_tests.lua # Started on Sun May 6 19:15: # Starting class: TestAdder not ok 1 TestAdder.test_add # luaunit/tests/testadder.lua:8: expected: 3e+100, actual: 3e+100 # Ran 1 tests in seconds, 0 successes, 1 failure Failed 1/1 subtests Test Summary Report luaunit/run_tests.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!64
65 luaunit/run_tests.lua # Started on Sun May 6 19:15: # Starting class: TestAdder not ok 1 TestAdder.test_add # luaunit/tests/testadder.lua:8: expected: 3e+100, actual: 3e+100 # Ran 1 tests in seconds, 0 successes, 1 failure Failed 1/1 subtests Test Summary Report luaunit/run_tests.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!65
66 Лаконичные assert-ы Структуризация Наследование Подготовка/ очистка данных Выборочный запуск Test.More Busted LuaUnit!66
67 LuaUnit: особенности Каждый тест: в отдельной глобальной таблице (модуле) "by design" Тестовые сообщения задавать нельзя вообще Фреймворк "перегружен" лишними проверками и функциями!67
68 Что можно сделать?!68
69 Perl: Test::Class...!69
70 ...основан на junit...!70
71 ...использует Test::More!!71
72 Lua:...?!72
73 ...lua-testclass!!73
74 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!74
75 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!75
76 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!76
77 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!77
78 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!78
79 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!79
80 t/tests/testsfor/adder.lua local _M = require('middleclass')('testsfor.adder', require('test.class')) require('test.more') local adder = require('adder') function _M:test_add() is(adder.add(2.0001, ), 4, ' plus equals 4') is(adder.add(1e100, 2e100), 3e100, '1e100 plus 2e100 equals 3e100') end return _M!80
81 t/tc.lua require('testsfor.adder') local tc = require('test.class') tc.run_tests()!81
82 prove -vm t/tc.lua!82
83 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!83
84 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!84
85 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!85
86 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!86
87 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!87
88 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!88
89 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!89
90 t/tc.lua.. # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # Failed test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e not ok 1 - test_add # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 53) 1..1 not ok 1 - TestsFor.Adder # Failed test (/Users/ichesnokov/git/lua-TestClass/lib/Test/Class.lua at line 18) 1..1 Failed 1/1 subtests Test Summary Report t/tc.lua (Wstat: 0 Tests: 1 Failed: 1) Failed test: 1 Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: FAIL!90
91 Добавим ещё один класс!91
92 lib/subtractor.lua return { -- subtract() - subtracts y from x and returns result subtract = function(x, y) return x - y end }!92
93 t/tc.lua require('testsfor.adder') require('testsfor.subtractor') local tc = require('test.class') tc.run_tests()!93
94 # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # TODO FP precision error # Failed (TODO) test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e ok 1 - test_add 1..1 ok 1 - TestsFor.Adder # Running tests for TestsFor.Subtractor # # Subtest: TestsFor.Subtractor # TestsFor.Subtractor.test_subtract() # Subtest: test_subtract ok 1-1 minus 1 equals 0 ok 2-0 minus -100 equals ok 1 - test_subtract 1..1 ok 2 - TestsFor.Subtractor!94
95 # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # TODO FP precision error # Failed (TODO) test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e ok 1 - test_add 1..1 ok 1 - TestsFor.Adder # Running tests for TestsFor.Subtractor # # Subtest: TestsFor.Subtractor # TestsFor.Subtractor.test_subtract() # Subtest: test_subtract ok 1-1 minus 1 equals 0 ok 2-0 minus -100 equals ok 1 - test_subtract 1..1 ok 2 - TestsFor.Subtractor!95
96 # Running tests for TestsFor.Adder # # Subtest: TestsFor.Adder # TestsFor.Adder.test_add() # Subtest: test_add ok plus equals 4 not ok 2-1e100 plus 2e100 equals 3e100 # TODO FP precision error # Failed (TODO) test (t/tests/testsfor/adder.lua at line 9) # got: 3e+100 # expected: 3e ok 1 - test_add 1..1 ok 1 - TestsFor.Adder # Running tests for TestsFor.Subtractor # # Subtest: TestsFor.Subtractor # TestsFor.Subtractor.test_subtract() # Subtest: test_subtract ok 1-1 minus 1 equals 0 ok 2-0 minus -100 equals ok 1 - test_subtract 1..1 ok 2 - TestsFor.Subtractor!96
97 Как загрузить много тестовых классов?!97
98 t/tc.lua require('testsfor.adder') require('testsfor.subtractor') require('testsfor.multiplier') require('testsfor.divider') require('testsfor.utils') require('testsfor.context') require('testsfor.character') require('testsfor.station') require('testsfor.travel') local tc = require('test.class') tc.run_tests()!98
99 t/tc-load.lua local tc = require('test.class') tc.load_classes('t/tests') tc.run_tests()!99
100 load_classes(dir) Рекурсивно обходит указанную директорию в поисках.lua файлов Для каждого найденного файла: Преобразует имя файла в имя модуля Загружает его при помощи require() Если это наследник Test.Class - добавляет в список для запуска!100
101 t/tc-load.lua local tc = require('test.class') tc.load_classes('t/tests') tc.run_tests()!101
102 run_tests(arg) Для каждого тестового класса из списка: создает объект при помощи new()......и запускает на нем тестовые методы arg - таблица с опциональным параметром: include - регулярное выражение, ограничивающее методы для запуска!102
103 Подготовка / очистка тестовых данных!103
104 ...для тестового класса test_startup() - подготовка test_shutdown() - очистка!104
105 ...для тестового метода test_setup() - подготовка self.current_method - имя метода test_teardown() - очистка!105
106 Наследование!106
107 Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом. Принцип подстановки Барбары Лисков (определение Роберта С. Мартина)!107
108 local _M = require('middleclass')('testsfor.parent', require('test.class')) require 'Test.More' function _M:test_parent() end pass('i am a test of parent') return _M!108
109 local _M = require('middleclass')('testsfor.parent', require('test.class')) require 'Test.More' function _M:test_parent() end pass('i am a test of parent') return _M!109
110 local _M = require('middleclass')('testsfor.parent', require('test.class')) require 'Test.More' function _M:test_parent() end pass('i am a test of parent') return _M!110
111 local _M = require('middleclass')('testsfor.parent', require('test.class')) require 'Test.More' function _M:test_parent() end pass('i am a test of parent') return _M!111
112 local _M = require('middleclass')('testsfor.child', require('testsfor.parent')) require 'Test.More' function _M:test_child() end pass('i am a test of child') return _M!112
113 local _M = require('middleclass')('testsfor.child', require('testsfor.parent')) require 'Test.More' function _M:test_child() end pass('i am a test of child') return _M!113
114 local _M = require('middleclass')('testsfor.child', require('testsfor.parent')) require 'Test.More' function _M:test_child() end pass('i am a test of child') return _M!114
115 t/tc-inheritance.lua.. # Running tests for TestsFor.Parent # # Subtest: TestsFor.Parent # TestsFor.Parent.test_parent() # Subtest: test_parent ok 1 - I am a test of parent 1..1 ok 1 - test_parent 1..1 ok 1 - TestsFor.Parent # Running tests for TestsFor.Child #...!115
116 # Running tests for TestsFor.Child # # Subtest: TestsFor.Child # TestsFor.Child.test_child() # Subtest: test_child ok 1 - I am a test of child 1..1 ok 1 - test_child # TestsFor.Child.test_parent() # Subtest: test_parent ok 1 - I am a test of parent 1..1 ok 2 - test_parent 1..2 ok 2 - TestsFor.Child 1..2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: PASS!116
117 Mixins!117
118 lib/mytestmixin.lua require 'Test.More' return { pi = , } test_from_mixin = function() end pass('this test always passes')!118
119 t/tests/testsfor/mixin.lua local _M = require('middleclass')('testsfor.mixin', require('test.class')) :include(require('mytestmixin')) function _M:test_pi() end pass('pi is: '.. self.pi) return _M!119
120 t/tests/testsfor/mixin.lua local _M = require('middleclass')('testsfor.mixin', require('test.class')) :include(require('mytestmixin')) function _M:test_pi() end pass('pi is: '.. self.pi) return _M!120
121 t/tests/testsfor/mixin.lua local _M = require('middleclass')('testsfor.mixin', require('test.class')) :include(require('mytestmixin')) function _M:test_pi() end pass('pi is: '.. self.pi) return _M!121
122 t/tc-mixin.lua.. # Running tests for TestsFor.Mixin # # Subtest: TestsFor.Mixin # TestsFor.Mixin.test_from_mixin() # Subtest: test_from_mixin ok 1 - This test always passes 1..1 ok 1 - test_from_mixin # TestsFor.Mixin.test_pi() # Subtest: test_pi ok 1 - PI is: ok 2 - test_pi 1..2 ok 1 - TestsFor.Mixin 1..1 ok All tests successful. Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: PASS!122
123 t/tc-mixin.lua.. # Running tests for TestsFor.Mixin # # Subtest: TestsFor.Mixin # TestsFor.Mixin.test_from_mixin() # Subtest: test_from_mixin ok 1 - This test always passes 1..1 ok 1 - test_from_mixin # TestsFor.Mixin.test_pi() # Subtest: test_pi ok 1 - PI is: ok 2 - test_pi 1..2 ok 1 - TestsFor.Mixin 1..1 ok All tests successful. Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: PASS!123
124 t/tc-mixin.lua.. # Running tests for TestsFor.Mixin # # Subtest: TestsFor.Mixin # TestsFor.Mixin.test_from_mixin() # Subtest: test_from_mixin ok 1 - This test always passes 1..1 ok 1 - test_from_mixin # TestsFor.Mixin.test_pi() # Subtest: test_pi ok 1 - PI is: ok 2 - test_pi 1..2 ok 1 - TestsFor.Mixin 1..1 ok All tests successful. Files=1, Tests=1, 0 wallclock secs ( 0.02 usr sys = 0.02 CPU) Result: PASS!124
125 Ок, с Test.Class мы можем...!125
126 С Test.Class мы можем Написать юнит-тест Запустить тесты: Для выбранных или для всех классов в директории Для всех или выбранных методов Подготавливать / очищать данные для тестов Использовать наследование и примеси!126
127 Лаконичные assert-ы Структуризация Наследование Подготовка/ очистка данных Выборочный запуск Test.More Busted LuaUnit Test.Class!127
128 Test.Class - особенности Работает только на *nix-based системах (сейчас) Нет тестов, документации Ранняя альфа версия - возможны (и наверняка будут) изменения!128
129 Использовать на свой страх и риск ;-)!129
130 Test.Class - wishlist / plans Поддержка тестового плана "Автоплан" по количеству тестовых классов / методов Пропуск тестовых классов / методов Меньше boilerplate в начале тестовых классов!130
131 Скачать (бесплатно, без sms) Busted: luarocks.org LuaUnit: luarocks.org lua-testmore: luarocks.org github.com/ichesnokov/lua-testclass!131
132 Вопросы?!132
133 Спасибо!
Oracle Object-Relational Features. Пыхалов А.В. ЮГИНФО
Oracle Object-Relational Features Пыхалов А.В. ЮГИНФО Две грубейшие ошибки ORсистем Под классом объектов понимаем тип данных, имеющий поля и методы Две ошибки OR систем Класс объекта == Отношение Работа
More informationОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Лекция 1 / г.
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Лекция 1 / 04 04.03.2019 г. VIRTUAL DESTRUCTOR class Shape{ int x, y; Shape(int x, int y); ~Shape(){ printf("dtor shape!\n"); class Circle: public Shape{ int
More informationManaging PKI Deployments. WhiteRabbitSecurity
Managing PKI Deployments Overview Business requirements Automated CI/CD process overview Demo VM (with Vagrant) (directory layout, usage) Modifying the configuration Deployment in test environment Marking
More informationruns all the testscripts named as arguments and checks standard output for the expected strings in TAP format.
NAME VERSION SYNOPSIS Test::Harness - Run Perl standard test scripts with statistics Version 2.64 DESCRIPTION Taint mode use Test::Harness; runtests(@test_files); STOP! If all you want to do is write a
More informationORM/Hibernate. Hibernate - это один из самых популярных на сегодняшний день ORM-фреймворков.
Hibernate ORM/Hibernate ORM(Object/Relational Mapping) - это способ сохранения объектов в реляционную базу данных. Другими словами ORM освобождает нас от работы с SQL и позволяет сосредоточиться на ООП.
More informationof data is not limited, no matter how much data you upload or access from your servers the connection capacity remains high.
Windows vps 1&1 Cloud Infrastructure with VMWare Virtualization: If one hardware component fails, the system automatically switches to another. Is there a backup and recovery solution for my virtual server
More informationTypeScript. Часть II. Старков Дима
TypeScript Часть II Старков Дима 1 Сегодня Вывод типов Структурная типизация Более сложные типы Обобщенные типы Type Guards 2 TypeScript? Спасет от выстрелов себе в ногу ESNext прямо сейчас Средство против
More informationA Tour of Perl Testing
A Tour of Perl Testing A Tour of Perl Testing Perl 测试之旅 agentzh@yahoo.cn 章亦春 (agentzh) 2009.9 Why testing? When things have gone wrong in collaboration... agentzh: With my patch in r2545, Jifty's I18N
More informationОсновы Java для разработки приложений для Android. Версия 7 AND-404
Основы Java для разработки приложений для Android. Версия 7 AND-404 ДЕТАЛЬНАЯ ИНФОРМАЦИЯ О КУРСЕ Основы Java для разработки приложений для Android. Версия 7 Код курса: AND-404 Длительность 2 дня / 12 академических
More information# Rather than print STDERR "# here's what went wrong\n" diag("here's what went wrong");
NAME SYNOPSIS Test::More - yet another framework for writing test scripts use Test::More tests => 23; # or use Test::More skip_all => $reason; # or use Test::More; # see done_testing() BEGIN { use_ok(
More informationLuaUnit Documentation
LuaUnit Documentation Release 1.6 Philippe Fremy January 01, 2016 Contents 1 Introduction 1 1.1 Platform support............................................. 1 1.2 Development...............................................
More informationОбзор веб-сайта alltechnews.net
Обзор веб-сайта alltechnews.net Сгенерирован 30 Декабря 2018 12:50 Набрано баллов: 59/100 Заголовок страницы Home - Technology news Длина : 22 Замечательно, Ваш заголовок страницы содержит от 10 до 70
More informationC++17. Antony Polukhin Полухин Антон
C++17 Antony Polukhin Полухин Антон Boost libraries maintainer (DLL, LexicalCast, Any, TypeIndex, Conversion) + Boost.CircularBuffer, Boost.Variant Представитель РГ21, national body Оглавление Автоматическое
More informationКарта «Кофейные регионы Эфиопии» Коллеги из Trabocca любезно предоставили нам карту кофейных регионов Эфиопии, за что
19 Февраля 2019 Карта «Кофейные регионы Эфиопии» Коллеги из Trabocca любезно предоставили нам карту кофейных регионов Эфиопии, за что большое им спасибо! Целью создания карты была ощутимая прослеживаемость
More informationОБЛАЧНЫЙ ДЕМОЗАЛ. Легко находите KIP Sales, Marketing и технические ресурсы по продукту.
LIKE US KIPAMERICA FOLLOW @KIPWIDEFORMAT SUBSCRIBE KIPAMERICANOVI FOLLOW KIPWIDEFORMAT ОБЛАЧНЫЙ ДЕМОЗАЛ Легко находите KIP Sales, Marketing и технические ресурсы по продукту. Просто нажмите любую ссылку.
More informationLizardtech djvu document express editor 6.0 pro portable. Lizardtech djvu document express editor 6.0 pro portable.zip
Lizardtech djvu document express editor 6.0 pro portable Lizardtech djvu document express editor 6.0 pro portable.zip Portable LizardTech Doc Exp Pro 6 djvu editor. Lizardtech_DjVu_Document_Express_Editor_6.0.1_Build_1259,
More informationModule 1 Introduction to Information Storage
Module 1 Introduction to Information Storage Copyright 2012 EMC Corporation. All rights reserved Module 1: Introduction to Information Storage 1 Курс содержит 15 Modules. Copyright 2012 EMC Corporation.
More informationжидкость и пневматика Rectus 86/87/88 Быстроразъемные соединения для термостатирования пресс-форм
жидкость и пневматика Rectus 8//88 Быстроразъемные соединения для термостатирования пресс-форм 2ow Pressure Mould s INTERNTION 80% of actual size Chart Pressure rop (bar) Pressure rop (bar) Pressure rop
More informationNina Popova, St.Petersburg Polytechnic University Liudmila Devel, St.Petersburg University of Culture.
Nina Popova, St.Petersburg Polytechnic University ninavaspo@mail.ru Liudmila Devel, St.Petersburg University of Culture miladevel@gmail.com Content and Language integrated learning is a dual-focused educational
More informationTvheadend - Feature #4459 exported m3u playlist - add group-title= parameter
Tvheadend - Feature #4459 exported m3u playlist - add group-title= parameter 2017-06-26 08:21 - kodiaq kodiaq Status: New Start date: 2017-11-20 Priority: Normal Due date: Assignee: % Done: 100% Category:
More informationНовые возможности финансирования (следующие конкурсы FP7-ICT практические советы, инструменты поддержки Idealist2011
Новые возможности финансирования (следующие конкурсы FP7-ICT ICT, FP7-ERA ERA-WIDE), практические советы, инструменты поддержки Idealist2011 Т.О.Ляднова, БелИСА, ICT NCP FP ЕС СОДЕРЖАНИЕ Новые конкурсы
More informationApache Kafka и реактивные микросервисы на.net Core. Денис
Apache Kafka и реактивные микросервисы на.net Core Денис Иванов denis@ivanovdenis.ru @denisivanov 1 Обо мне 2 Код и презентация https://github.com/denisivan0v/dotnext-moscow-2017 3 План 4 5 Терминология
More informationРезультат запроса: bonfire knife party скачать
Результат запроса: bonfire knife party скачать OutletKnife Party - Bonfire - скачать бесплатно в mp3скачать песню и музыку Knife Party - Bonfire (0riginal Mix Save On Bonfire At Walmart With Walmarts Everyday
More informationPolygonMap Help. Contents
PolygonMap Help Contents Introduction 2 One poly mapping 3 Parameters Rollout 5 Link Rollout 10 Transform Rollout 13 Slice Rollout 14 Viewport Rollout 14 Junction point 15 Additional info 16 Mapping creation
More informationОсновы Perfect Developer
Основы Perfect Developer Краткий курс Содержание Session 1: начало работы Configuring Perfect Developer and creating a project Expressions, types, constants, functions, properties Classes, data, invariants,
More informationTarantool. Выпуск 1.9.0
Tarantool Выпуск 1.9.0 мая 04, 2018 Оглавление 1 What s new in Tarantool 1.7.6? 2 1.1 Что нового в Tarantool 1.7?.................................... 2 2 What s new in Tarantool 1.6.9? 4 2.1 What s new
More informationМаксим Грамин КРОК. В поисках идеального инструмента
Максим Грамин КРОК В поисках идеального инструмента Disclaimer Личное мнение на личном опыте Немного о себе Немного о себе Немного о себе Немного о себе Немного о себе Одинаковые проблемы Версионность
More informationlab9 task1 nets: Пажитных Иван Павлович 3 курс, 1 группа, МСС github lab link ip/mask /26 ip mask
lab9 Пажитных Иван Павлович 3 курс, 1 группа, МСС github lab link task1 nets: net1: name value ip/mask 176.141.64.0/26 ip 176.141.64.0 mask 255.255.255.192 net size 62 min addr 176.141.64.1 max addr 176.141.64.62
More informationsubtest $builder->subtest($name,
NAME SYNOPSIS Test::Builder - Backend for building test libraries package My::Test::Module; use base 'Test::Builder::Module'; my $CLASS = PACKAGE ; sub ok { my($test, $name) = @_; my $tb = $CLASS->builder;
More information3D ray tracing simple scalability case study
3D ray tracing simple scalability case study Threading in OpenMP*, Intel Threading Building Blocks and Intel Cilk Plus Based on Intel TBB tachyon package example Vladimir Polin Threading Runtimes Engineering
More informationLoadDataToDataGrid();
Архангельский Алексей /// Загрузка данных в таблицу на форме в зависимости от того, что выбрано в комбобоксе private void LoadDataToDataGrid() button_add.isenabled = false; datagrid_booksorreaders.itemssource
More information3M Human Resources Talent Acquisition
3M Human Resources Talent Acquisition 3M Jobs Country Data Privacy Statements Click on the appropriate country to find the applicable agreement text: Algeria Argentina Australia Austria Azerbaijan Belarus
More informationVerification of System on Chip Integrated Communication Controllers
Verification of System on Chip Integrated Communication Controllers M.V. Petrochenkov R.E. Mushtakov D.I. Shpagilev MCST, 1 Nagatinskaya
More informationInstruction for use Инструкция по эксплуатации UMPCB RU. POWERTEX Chain Block model PCB-S1
GB RU Instruction for use Инструкция по эксплуатации! UMPCB20181119RU POWERTEX Chain Block model PCB-S1 1 POWERTEX Chain Block PCB-S1 0.25 20 tonnes Instruction for use (GB) (Original instructions) Read
More informationСеминар 4 (26) Программирование сопроцессора Intel Xeon Phi (MPI)
Семинар 4 (26) Программирование сопроцессора Intel Xeon Phi (MPI) Михаил Курносов E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Цикл семинаров «Основы параллельного программирования» Институт физики
More informationОБЗОР СЕРИИ IMAGERUNNER ADVANCE C35XX II
ОБЗОР СЕРИИ IMAGERUNNER ADVANCE C35XX II ЦВЕТНОЕ МФУ А3 НА ПЛАТФОРМЕ IMAGERUNNER ADVANCE Хит продаж Для офиса и оперативной полиграфии ir ADV C3520i II ir ADV C3525i II Низкая полная стоимость владения
More informationБаум Виталий Sr. SharePoint Developer Conteq
Баум Виталий Sr. SharePoint Developer Conteq Office Applications Design Tools SharePoint Описывает схему внешних данных и правила взаимодействия с Office и SharePoint *так же известный как BDC Entity
More informationЛист 1 RU С-US.ГБ08.B.02500
Лист 1 1. Application and scope The valve position controllers, DXR, TXP, TXS, TVL, TVH, TVF are designed to control and provide feedback about the position of the combination actuator / valve. The controllers
More informationVeeam Backup & Replication
Veeam Backup & Replication Год/Дата Выпуска: 31.10.2012 Версия: 6.5 Разработчик: Veeam Сайт разработчика: http://www.veeam.com Разрядность: 32bit+64bit Язык интерфейса: Английский Таблэтка: Присутствует
More informationConfigure Dr.Web to protect your computer from miners
Doctor Web 2018 To maximally protect your computer against modern malware programs including miners you need to configure your anti-virus right after you install it. 1. Make sure that the anti-virus version
More informationNodeBB Documentation. Выпуск The NodeBB Team (https://github.com/nodebb/nodebb/gra
NodeBB Documentation Выпуск 0.4.1 The NodeBB Team (https://github.com/nodebb/nodebb/gra нояб. 17, 2017 Оглавление 1 Установка NodeBB 3 1.1 Установка NodeBB в ОС...................................... 3
More informationNew Replication Features MySQL 5.1 and MySQL 6.0/5.4
2009 04 21 Lars Thalmann & Mats Kindahl New Replication Features www.mysql.com 1 New Replication Features MySQL 5.1 and MySQL 6.0/5.4 Dr. Lars Thalmann Development Manager, Replication & Backup lars@mysql.com
More informationМетодика записи платы М101 для концентратора KP-8 и абоненского выноса AV Подключить jtag, включить плату и запустить программу jtag
Методика записи платы М101 для концентратора KP-8 и абоненского выноса AV-32 Предварительно надо разместить файлы vmimage и rootfs.jffs2 в корневом каталоге tftp сервера. Для записи чистой платы начинаем
More informationVk boys dropbox files
P ford residence southampton, ny Vk boys dropbox files 24-10-2009 Rick Astley - Never Gonna Give You Up (Official Music Video) - Listen On Spotify: http://smarturl.it/astleyspotify Download Rick's Number
More informationA Model-Based Approach to Design Test Oracles for Memory Subsystems of Multicore Microprocessors
A Model-Based Approach to Design Test Oracles for Memory Subsystems of Multicore Microprocessors Alexander Kamkin , Mikhail Petrochenkov , ISP RAS, 5 Alexander Solzhenitsyn
More informationBoundary-Based Interval Newton s Method. Интервальный метод Ньютона, основанный на границе
Interval Computations No 4, 1993 Boundary-Based Interval Newton s Method L. Simcik and P. Linz The boundary based method for approximating solutions to nonlinear systems of equations has a number of advantages
More informationEvalua'ng the internet end- user experience in the Russian Federa'on Ini'al Findings
Evalua'ng the internet end- user experience in the Russian Federa'on Ini'al Findings Research commissioned from Predictable Network Solu'ons by Euraisa:Peering 1 1 New peering point @ IXcellerate Moscow
More informationBuild scripts - DBD-Oracle 1.21 against Windows Perl 5.6.1
Build scripts - DBD-Oracle 1.21 against Windows Perl 5.6.1 Contributed by Frotz Saturday, 03 May 2008 Last Updated Saturday, 03 May 2008 www.frotzware.com Use at your own risk, but if you are still using
More informationReversible Data Hiding Using a Histogram Modification
БЪЛГАРСКА АКАДЕМИЯ НА НАУКИТЕ BULGARIAN ACADEMY OF SCIENCES ПРОБЛЕМИ НА ТЕХНИЧЕСКАТА КИБЕРНЕТИКА И РОБОТИКАТА, 66 PROBLEMS OF ENGINEERING CYBERNETICS AND ROBOTICS, 66 София 2015 Sofia Reversible Data Hiding
More informationРуководство по быстрой установк
Руководство по быстрой установк TE100-S5 TE100-S8 1.21 Table of Contents Русский 1 1. Что нужно сделать в самом начале 1 2. Установка оборудования 2 3. LEDs 3 Technical Specifications 4 Troubleshooting
More informationПодключение ультразвукового датчика HC-SR04
Подключение ультразвукового датчика HC-SR04 Датчик HC-SR-04 состоит из передатчика, приемника и схемы управления. Для наиболее оптимального режима поиска препятствий датчик устанавливается на сервомотор
More informationExtJS 3.0. ExtJS Cookbook
ExtJS 3.0 Издательство PACKT Publishing порадовало новой книгой по ExtJS 3.0. Книга на английском языке. 376 страниц, на которых можно найти копируемые скрипты, сопровождающиеся доступными и лаконичными
More information1:1 A5 白底黑字, 80g 双胶纸.
TCL 多媒体科技控股有限公司运营中心 - 惠州 TV 工厂 -PE 部产品辅助设计室 ( 外销订单 ) 制作表编号 : HZ2017-11-227R 物料编号 : 72-NT63PS-XAPAB 牌子名称 : TCL L32S6FS 销往地 : RUSSIA 内容 : 说明书 BOM 编号 : H7-32P60HN-URNA0AA 型号 : 32S6 机芯 : NT63PS-EU 批 次 号 :
More informationCloud mail ru dropbox
Cloud mail ru dropbox 08/23/2017 Knee icd 10 for arthroscopic knee surgery 08/25/2017 Umar ked uttaula khan mp3 08/26/2017 -List of multisyllabic words 5th grade -Codeine and xanax mix 08/27/2017 Us bank
More informationОлимпиада по информатике
Олимпиада по информатике Синица Сергей Геннадьевич Председатель региональной предметно-методической комиссии Доцент кафедры информационных технологий КубГУ Язык программирования С++ или Java + Стандартная
More informationCisco Connect. Москва, Цифровизация: здесь и сейчас
Cisco Connect Москва, 2017 Цифровизация: здесь и сейчас Поиск и устранение неисправностей для решений UCCE/ Сергей Олиферов Инженер технической поддержки, Cisco TAC 2017 Cisco and/or its affiliates. All
More information3I, a new program for creating Internet-accessible interactive keys and taxonomic databases and its application for taxonomy of Cicadina (Homoptera)
Russian Entomol. J. 15(2): 263 268 RUSSIAN ENTOMOLOGICAL JOURNAL, 2006 3I, a new program for creating Internet-accessible interactive keys and taxonomic databases and its application for taxonomy of Cicadina
More informationJS_3. Формы. Графики. GitHub. Трубочкина Н.К.
JS_3. Формы. Графики. GitHub Трубочкина Н.К. 2018 Работа с формами Пример. З а д а ч а Кликните на ячейке для начала редактирования. Когда закончите -- нажмите OK или CANCEL. H T M
More informationAnyConnect по IKEv2 к ASA с AAA и проверкой подлинности сертификата
AnyConnect по IKEv2 к ASA с AAA и проверкой подлинности сертификата Содержание Введение Предварительные условия Требования Используемые компоненты Условные обозначения Чего вы будете требовать Сертификаты
More information1: epplus 2 2: 5 3: 8 4: 9 5: 12
epplus #epplus 1 1: epplus 2 2 2 Examples 3 3 3 2: 5 5 Examples 5 RichText 5 6 RichText 7 3: 8 8 Examples 8 8 4: 9 9 Examples 9 DataTable 9 DataTable SQL- 9 10 10 5: 12 12 Examples 12 Excel 12 CSV 12 Excel
More informationTESTING TOOLS. Standard Suite
A Perl toolbox for regression tests TESTING TOOLS With a test suite, you can fix bugs and add new features without ruining the existing codebase. BY MICHAEL SCHILLI A program that works right the first
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal I. Melnichenko, A. Kamkin, S. Smolov, An exted finite state machine-based approach to code coverage-directed test generation for hardware designs, Proceedings
More informationTHC Control 2.0 Plasma Cutting System Control Software
THC Control 2.0 Plasma Cutting System Control Software 01. General information about SW 1.1 SW setup and installation 1.2 The main changes after previous version 1.3 Features of update 02 Setup of processes
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal Sergey Ivanov, Anna Kalenkova, Comparing process models in the BPMN 2.0 XML format, Proceedings of ISP RAS, 2015, Volume 27, Issue 3, 255 266 DOI: https://doi.org/10.15514/ispras-2015-27(3)-17
More informationKAK - Event ID 1004 Terminal Services Client Access License (TS CAL) Availability
KAK - Event ID 1004 Terminal Services Client Access License (TS CAL) Availability Applies To: Windows Server 2008 A terminal server must be able to contact (discover) a Terminal Services license server
More informationhp g62 instructions FF495F187D5CF C61864FC99F9 Hp G62 Instructions 1 / 6
Hp G62 Instructions 1 / 6 2 / 6 3 / 6 Hp G62 Instructions In this guide I explain how to disassemble a HP G62 or Compaq Presario CQ62 laptop. HP G62 and Compaq Presario CQ62 are very similar (if not completely
More informationили "Преобразование IP адресов в доменные имена в отчетах LightSquid"
Учет трафика по всем портам ipcad + LightSquid или "Преобразование IP адресов в доменные имена в отчетах LightSquid" По настройке связки squid+lightsquid+ipcad написана достаточно статей. Есть неприятный
More informationZigmund & Shtain. Zigmund & Shtain CZ N L
555 min 590 560 597 0 a b c I II 600 +4 560 SERVICIO ASISTENCIA TECNICA 900500.. EN. RU 555 min N L N L + -0 +4-0 -0 8 8..4......5..6..7 +4-0 Zigmund & Shtain www.zigmundshtain.ru CZ57077 000085-6 Zigmund
More informationMONTHLY MAGAZINE RUSSIAN SWITZERLAND
MONTHLY MAGAZINE RUSSIAN SWITZERLAND 9 / 2017 #144 РУССКАЯ ШВЕЙЦАРИЯ МАРЬЮ ВУНДЕР Цюрихский доктор-ортодонт в детстве любила балет и бабушкины праздники в Петербурге 12 ВАЛЬТЕР ГЕЛЕР Швейцарский энтузиаст
More informationTL-PA2010 AV200 Nano Powerline Adapter
Rev: 1.0.1 1910010708 COPYRIGHT & TRADEMARKS Specifications are subject to change without notice. is a registered trademark of TP-LINK TECHNOLOGIES CO., LTD. Other brands and product names are trademarks
More informationMANAS Journal of Engineering. Volume 6 (Issue 1) (2018) Pages Outdoor People Tracking
MANAS Journal of Engineering MJEN Volume 6 (Issue 1) (2018) Pages 45-55 Outdoor People Tracking Venera Adanova 1, Maksat Atagoziev 2 1 Department of Computer Engineering, Middle East Technical University,
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal M. Belyaev, V. Itsykson, Fast and safe concrete code execution for reinforcing static analysis and verification, Model. Anal. Inform. Sist., 2015, Volume 22,
More informationPontificating on Perl Profiling. Lisa Hagemann VP Engineering, Dyn Inc. twitter.com/lhagemann twitter.com/dyninc
Pontificating on Perl Profiling Lisa Hagemann VP Engineering, Dyn Inc. twitter.com/lhagemann twitter.com/dyninc What is Profiling? A way to evaluate what is your program doing. Commonly evaluates the behavior
More informationСеминар 1 (23) Программирование сопроцессора Intel Xeon Phi
Семинар () Программирование сопроцессора Intel Xeon Phi Михаил Курносов E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Цикл семинаров «Основы параллельного программирования» Институт физики полупроводников
More informationUSING THE GENSYS SOFTWARE FOR RAILWAY VEHICLE MODELING
УДК 629.4 I. PERSSON, Mr. (AB DEsolver SWEDEN) USING THE GENSYS SOFTWARE FOR RAILWAY VEHICLE MODELING В Швеции и Скандинавии с 1971 года успешно проводится компьютерное моделирование динамики рельсовых
More informationIoT Security Platform
IoT Security Platform Andrey Doukhvalov Head of Future Tech Industrial Cybersecurity: Safegarding Progress Saint Petersburg, Russia September, 2017 1 IoT Malware in Action In 2016 one million devices have
More informationStudent Outcomes. Lesson Notes. Classwork. Example 2 (3 minutes)
Student Outcomes Students write expressions that record addition and subtraction operations with numbers. Lesson Notes This lesson requires the use of a white board for each student. Classwork Example
More information$t = timeit($count, '...other code...') print "$count loops of other code took:",timestr($t),"\n";
NAME Benchmark - benchmark running times of Perl code SYNOPSIS use Benchmark qw(:all) ; timethis ($count, "code"); # Use Perl code in strings... timethese($count, { 'Name1' => '...code1...', 'Name2' =>
More informationJsonb «smart» indexing. Parametrized opclasses
Jsonb «smart» indexing. Parametrized opclasses Nikita Glukhov Postgres Professional Oleg Bartunov SAI MSU, Postgres Professional PGCONG.RU, Febraury 6, 2018 Index Silver bullet! the only weapon that is
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal M. S. Lebedev, S. A. Smolov, A model checking-based method of functional test generation for HDL descriptions, Proceedings of ISP RAS, 2016, Volume 28, Issue
More informationHIGH-QUALITY HARDWARE ACCELERATED VISUALIZATION OF PARTICULATE MATERIALS
137 УДК 004.9 V.P. Volkov 1 (M.Sc.), M. Dosta 1 (M.Sc.), S. Heinrich 1 (Prof.), V.A. Svyatnyy (Prof.) 1 Hamburg University of Technology, Germany Donetsk National Technical University, Ukraine dosta@tu-harburg.de
More informationОптимизация запросов в PostgreSQL - live at PG Day. Алексей Ермаков Илья Космодемьянский
Оптимизация запросов в PostgreSQL - live at PG Day Алексей Ермаков Илья Космодемьянский Постановка задачи Есть postgresql, которому плохо Куда смотреть Что делать В каком порядке Кто виноват План действий
More informationКИБЕРНЕТИКА И МЕХАТРОНИКА
КИБЕРНЕТИКА И МЕХАТРОНИКА УДК 621.3.049.77:000.93 EMERGING ARCHITECTURES FOR PROCESSOR-IN-MEMORY CHIPS: TAXONOMY AND IMPLEMENTATION Valery A. Lapshinsky Peoples Friendship University of Russia Miklukho-Maklaya
More information(TrueType)"="seguili.ttf" "Segoe UI Semibold (TrueType)"="seguisb.ttf" "Segoe UI Semibold Italic (TrueType)"="seguisbi.ttf" "Segoe UI Semilight
Segoe ui symbol - version 5.00 Legal Background of the Segoe Case, an anti-segoe perspective. Monotype Corsiva 670 characters (669 glyphs) in version 2.35. Se volete tornare indietro al font originale
More informationAnalysis System of Scientific Publications Based on the Ontology Approach
Analysis System of Scientific Publications Based on the Ontology Approach Viacheslav Lanin, Svetlana Strinuk National Research University Higher School of Economics, Perm, Russian Federation lanin@perm.ru,
More informationКраткое руководство по установке
Краткое руководство по установке SUSE Linux Enterprise Server 12 с пакетом обновления 3 В этом руководстве приведены требования к системе, а также пошаго- вые инструкции по установке сервера SUSE Linux
More informationПриложение IRC 117 E от
Приложение IRC 117 E от 29.06.2010 Предварительные пояснения. Устройство Обозначение устройства Доступные коды пульта IRC 117 E Телевизоры TV, TV/VCR, TV/AUX 101-102 CD, DVD проигрыватели AUX, TV/AUX 301-328
More informationXML Model for Legal Documents
БЪЛГАРСКА АКАДЕМИЯ НА НАУКИТЕ. BULGARIAN ACADEMY OF SCIENCES ПРОБЛЕМИ НА ТЕХНИЧЕСКАТА КИБЕРНЕТИКА И РОБОТИКАТА, 54 PROBLEMS OF ENGINEERING CYBERNETICS AND ROBOTICS, 54 София. 2004. Sofia XML Model for
More informationVisual Quality Increasing using Image Parts Improvement for Fractal Image Compression
Visual Quality Increasing using Image Parts Improvement for Fractal Image Compression Dmitriy Vatolin Moscow State University dm@amc amc.ru Introduction New compression methods with loosing of information:
More informationCollateral damage of Internet content blocking. ENOG14, Samorukov, Netart Group, Isavnin, Internet Protection Society
Collateral damage of Internet content blocking ENOG14, 10.10.2017 Samorukov, Netart Group, Isavnin, Internet Protection Society States wants to restrict access to some information (and services) to protect
More informationUSER MANUAL(GB)...P03 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ(RU)...P08 CMY
USER MANUAL(GB)...P03 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ(RU)...P08 C M Y CM MY CY CMY K B1 B2 B3 C A B C F1 D F2 E1* E* G R F3 H Q F F4 P I J M O 1 L* K N * Certain models only 2 3 4 5 TURBO 6 7 1 2 8 9 10 11 12
More informationFULL GUIDANCE AND TUTORIAL: HOW TO MAKE A DIY SELFIEBOT
FULL GUIDANCE AND TUTORIAL: HOW TO MAKE A DIY SELFIEBOT ENDURANCE 2016 Content Electronics assembling process... 3 Brief instruction for a DIY SelfieBot (SelfieBot Base) assembly process.... 3 Brief instruction
More informationVk cloud mail ru links
Мобильный портал WAP версия: wap.altmaster.ru Vk cloud mail ru links Apr 23, 2015. Android L Material Design; Cloud.Mail.Ru introduced paid storage plans that expand. RU 1,286 million. Fast and safe block
More informationDSL-2640U Wireless ADSL2/2+ 4-port
This product can be set up using any current web browser, i.e., Internet Explorer 6x or Netscape Navigator 7x and up. DSL-2640U Wireless ADSL2/2+ 4-port Ethernet Router Before You Begin Make sure you have
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal A. Yu. Evnin, N. I. Yusova, An approximation algorithm for the maximum traveling salesman problem, J. Comp. Eng. Math., 2017, Volume 4, Issue 3, 49 54 DOI: https://doi.org/10.14529/jcem170306
More informationApproach on Applications of Random High Data Flows Concerning the Architecture of Computer Networks
ELECTRONICS AND ELECTRICAL ENGINEERING ISSN 1392 1215 2010. No. 7(103) ELEKTRONIKA IR ELEKTROTECHNIKA T 120 SYSTEM ENGINEERING, COMPUTER TECHNOLOGY SISTEMŲ INŽINERIJA, KOMPIUTERINĖS TECHNOLOGIJOS Approach
More informationКонсультант в Miles. Работаю с F# и Демо презентации: https://github.com/object/ AkkaStreamsDemo
Консультант в Miles Работаю с F# и C# @ooobject vagif.abilov@mail.com Демо презентации: https://github.com/object/ AkkaStreamsDemo У вас уже может быть опыт работы с...для понимания этого доклада он необязателен!
More informationКак развернуть кампусную сеть Cisco за 10 минут? Новые технологии для автоматизации и аналитики в корпоративных сетях Cisco.
The image part with relationship ID rid2 was not found in the file. The image part with relationship ID rid2 was not found in the file. Как развернуть кампусную сеть Cisco за 10 минут? Новые технологии
More informationHigher Order Perl. Finlay Thompson. 14 March 2006
Finlay Thompson 14 March 2006 Talk Outline What is this all about? Some FP techniques and ideas Loops, recursion, iterators, chasing tails, loops Currying and anonymous subroutines Conclusions What is
More informationMath-Net.Ru All Russian mathematical portal
Math-Net.Ru All Russian mathematical portal I. V. Maryasov, V. A. Nepomniaschy, D. A. Kondratyev, Invariant elimination of definite iterations over arrays in C programs verification, Model. Anal. Inform.
More information