Юнит-тестирование Lua-кода при помощи TAP. Илья Чесноков

Size: px
Start display at page:

Download "Юнит-тестирование Lua-кода при помощи TAP. Илья Чесноков"

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. Пыхалов А.В. ЮГИНФО Oracle Object-Relational Features Пыхалов А.В. ЮГИНФО Две грубейшие ошибки ORсистем Под классом объектов понимаем тип данных, имеющий поля и методы Две ошибки OR систем Класс объекта == Отношение Работа

More information

ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Лекция 1 / г.

ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Лекция 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 information

Managing PKI Deployments. WhiteRabbitSecurity

Managing 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 information

runs all the testscripts named as arguments and checks standard output for the expected strings in TAP format.

runs 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 information

ORM/Hibernate. Hibernate - это один из самых популярных на сегодняшний день ORM-фреймворков.

ORM/Hibernate. Hibernate - это один из самых популярных на сегодняшний день ORM-фреймворков. Hibernate ORM/Hibernate ORM(Object/Relational Mapping) - это способ сохранения объектов в реляционную базу данных. Другими словами ORM освобождает нас от работы с SQL и позволяет сосредоточиться на ООП.

More information

of data is not limited, no matter how much data you upload or access from your servers the connection capacity remains high.

of 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 information

TypeScript. Часть II. Старков Дима

TypeScript. Часть II. Старков Дима TypeScript Часть II Старков Дима 1 Сегодня Вывод типов Структурная типизация Более сложные типы Обобщенные типы Type Guards 2 TypeScript? Спасет от выстрелов себе в ногу ESNext прямо сейчас Средство против

More information

A Tour of Perl Testing

A 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 ДЕТАЛЬНАЯ ИНФОРМАЦИЯ О КУРСЕ Основы 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");

# 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 information

LuaUnit Documentation

LuaUnit 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 Обзор веб-сайта alltechnews.net Сгенерирован 30 Декабря 2018 12:50 Набрано баллов: 59/100 Заголовок страницы Home - Technology news Длина : 22 Замечательно, Ваш заголовок страницы содержит от 10 до 70

More information

C++17. Antony Polukhin Полухин Антон

C++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 любезно предоставили нам карту кофейных регионов Эфиопии, за что

Карта «Кофейные регионы Эфиопии» Коллеги из Trabocca любезно предоставили нам карту кофейных регионов Эфиопии, за что 19 Февраля 2019 Карта «Кофейные регионы Эфиопии» Коллеги из Trabocca любезно предоставили нам карту кофейных регионов Эфиопии, за что большое им спасибо! Целью создания карты была ощутимая прослеживаемость

More information

ОБЛАЧНЫЙ ДЕМОЗАЛ. Легко находите KIP Sales, Marketing и технические ресурсы по продукту.

ОБЛАЧНЫЙ ДЕМОЗАЛ. Легко находите KIP Sales, Marketing и технические ресурсы по продукту. LIKE US KIPAMERICA FOLLOW @KIPWIDEFORMAT SUBSCRIBE KIPAMERICANOVI FOLLOW KIPWIDEFORMAT ОБЛАЧНЫЙ ДЕМОЗАЛ Легко находите KIP Sales, Marketing и технические ресурсы по продукту. Просто нажмите любую ссылку.

More information

Lizardtech 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 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 information

Module 1 Introduction to Information Storage

Module 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 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 information

Nina Popova, St.Petersburg Polytechnic University Liudmila Devel, St.Petersburg University of Culture.

Nina 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 information

Tvheadend - Feature #4459 exported m3u playlist - add group-title= parameter

Tvheadend - 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 практические советы, инструменты поддержки Idealist2011 Новые возможности финансирования (следующие конкурсы FP7-ICT ICT, FP7-ERA ERA-WIDE), практические советы, инструменты поддержки Idealist2011 Т.О.Ляднова, БелИСА, ICT NCP FP ЕС СОДЕРЖАНИЕ Новые конкурсы

More information

Apache Kafka и реактивные микросервисы на.net Core. Денис

Apache 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 скачать Результат запроса: bonfire knife party скачать OutletKnife Party - Bonfire - скачать бесплатно в mp3скачать песню и музыку Knife Party - Bonfire (0riginal Mix Save On Bonfire At Walmart With Walmarts Everyday

More information

PolygonMap Help. Contents

PolygonMap 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 Основы Perfect Developer Краткий курс Содержание Session 1: начало работы Configuring Perfect Developer and creating a project Expressions, types, constants, functions, properties Classes, data, invariants,

More information

Tarantool. Выпуск 1.9.0

Tarantool. Выпуск 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 information

lab9 task1 nets: Пажитных Иван Павлович 3 курс, 1 группа, МСС github lab link ip/mask /26 ip mask

lab9 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 information

subtest $builder->subtest($name,

subtest $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 information

3D ray tracing simple scalability case study

3D 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 information

LoadDataToDataGrid();

LoadDataToDataGrid(); Архангельский Алексей /// Загрузка данных в таблицу на форме в зависимости от того, что выбрано в комбобоксе private void LoadDataToDataGrid() button_add.isenabled = false; datagrid_booksorreaders.itemssource

More information

3M Human Resources Talent Acquisition

3M 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 information

Verification of System on Chip Integrated Communication Controllers

Verification 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 information

Instruction for use Инструкция по эксплуатации UMPCB RU. POWERTEX Chain Block model PCB-S1

Instruction 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) Семинар 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 ОБЗОР СЕРИИ 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 Баум Виталий Sr. SharePoint Developer Conteq Office Applications Design Tools SharePoint Описывает схему внешних данных и правила взаимодействия с Office и SharePoint *так же известный как BDC Entity

More information

Лист 1 RU С-US.ГБ08.B.02500

Лист 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 information

Veeam Backup & Replication

Veeam Backup & Replication Veeam Backup & Replication Год/Дата Выпуска: 31.10.2012 Версия: 6.5 Разработчик: Veeam Сайт разработчика: http://www.veeam.com Разрядность: 32bit+64bit Язык интерфейса: Английский Таблэтка: Присутствует

More information

Configure Dr.Web to protect your computer from miners

Configure 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 information

NodeBB Documentation. Выпуск The NodeBB Team (https://github.com/nodebb/nodebb/gra

NodeBB 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 information

New Replication Features MySQL 5.1 and MySQL 6.0/5.4

New 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 Подключить jtag, включить плату и запустить программу jtag Методика записи платы М101 для концентратора KP-8 и абоненского выноса AV-32 Предварительно надо разместить файлы vmimage и rootfs.jffs2 в корневом каталоге tftp сервера. Для записи чистой платы начинаем

More information

Vk boys dropbox files

Vk 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 information

A 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 A Model-Based Approach to Design Test Oracles for Memory Subsystems of Multicore Microprocessors Alexander Kamkin , Mikhail Petrochenkov , ISP RAS, 5 Alexander Solzhenitsyn

More information

Boundary-Based Interval Newton s Method. Интервальный метод Ньютона, основанный на границе

Boundary-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 information

Evalua'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 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 information

Build scripts - DBD-Oracle 1.21 against Windows Perl 5.6.1

Build 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 information

Reversible Data Hiding Using a Histogram Modification

Reversible 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-SR04 Датчик HC-SR-04 состоит из передатчика, приемника и схемы управления. Для наиболее оптимального режима поиска препятствий датчик устанавливается на сервомотор

More information

ExtJS 3.0. ExtJS Cookbook

ExtJS 3.0. ExtJS Cookbook ExtJS 3.0 Издательство PACKT Publishing порадовало новой книгой по ExtJS 3.0. Книга на английском языке. 376 страниц, на которых можно найти копируемые скрипты, сопровождающиеся доступными и лаконичными

More information

1:1 A5 白底黑字, 80g 双胶纸.

1:1 A5 白底黑字, 80g 双胶纸. TCL 多媒体科技控股有限公司运营中心 - 惠州 TV 工厂 -PE 部产品辅助设计室 ( 外销订单 ) 制作表编号 : HZ2017-11-227R 物料编号 : 72-NT63PS-XAPAB 牌子名称 : TCL L32S6FS 销往地 : RUSSIA 内容 : 说明书 BOM 编号 : H7-32P60HN-URNA0AA 型号 : 32S6 机芯 : NT63PS-EU 批 次 号 :

More information

Cloud mail ru dropbox

Cloud 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 information

Cisco Connect. Москва, Цифровизация: здесь и сейчас

Cisco Connect. Москва, Цифровизация: здесь и сейчас Cisco Connect Москва, 2017 Цифровизация: здесь и сейчас Поиск и устранение неисправностей для решений UCCE/ Сергей Олиферов Инженер технической поддержки, Cisco TAC 2017 Cisco and/or its affiliates. All

More information

3I, a new program for creating Internet-accessible interactive keys and taxonomic databases and its application for taxonomy of Cicadina (Homoptera)

3I, 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 information

JS_3. Формы. Графики. GitHub. Трубочкина Н.К.

JS_3. Формы. Графики. GitHub. Трубочкина Н.К. JS_3. Формы. Графики. GitHub Трубочкина Н.К. 2018 Работа с формами Пример. З а д а ч а Кликните на ячейке для начала редактирования. Когда закончите -- нажмите OK или CANCEL. H T M

More information

AnyConnect по IKEv2 к ASA с AAA и проверкой подлинности сертификата

AnyConnect по IKEv2 к ASA с AAA и проверкой подлинности сертификата AnyConnect по IKEv2 к ASA с AAA и проверкой подлинности сертификата Содержание Введение Предварительные условия Требования Используемые компоненты Условные обозначения Чего вы будете требовать Сертификаты

More information

1: epplus 2 2: 5 3: 8 4: 9 5: 12

1: 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 information

TESTING TOOLS. Standard Suite

TESTING 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 information

Math-Net.Ru All Russian mathematical portal

Math-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 information

THC Control 2.0 Plasma Cutting System Control Software

THC 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 information

Math-Net.Ru All Russian mathematical portal

Math-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 information

KAK - Event ID 1004 Terminal Services Client Access License (TS CAL) Availability

KAK - 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 information

hp g62 instructions FF495F187D5CF C61864FC99F9 Hp G62 Instructions 1 / 6

hp 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"

или Преобразование IP адресов в доменные имена в отчетах LightSquid Учет трафика по всем портам ipcad + LightSquid или "Преобразование IP адресов в доменные имена в отчетах LightSquid" По настройке связки squid+lightsquid+ipcad написана достаточно статей. Есть неприятный

More information

Zigmund & Shtain. Zigmund & Shtain CZ N L

Zigmund & 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 information

MONTHLY MAGAZINE RUSSIAN SWITZERLAND

MONTHLY MAGAZINE RUSSIAN SWITZERLAND MONTHLY MAGAZINE RUSSIAN SWITZERLAND 9 / 2017 #144 РУССКАЯ ШВЕЙЦАРИЯ МАРЬЮ ВУНДЕР Цюрихский доктор-ортодонт в детстве любила балет и бабушкины праздники в Петербурге 12 ВАЛЬТЕР ГЕЛЕР Швейцарский энтузиаст

More information

TL-PA2010 AV200 Nano Powerline Adapter

TL-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 information

MANAS Journal of Engineering. Volume 6 (Issue 1) (2018) Pages Outdoor People Tracking

MANAS 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 information

Math-Net.Ru All Russian mathematical portal

Math-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 information

Pontificating 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 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

Семинар 1 (23) Программирование сопроцессора Intel Xeon Phi Семинар () Программирование сопроцессора Intel Xeon Phi Михаил Курносов E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Цикл семинаров «Основы параллельного программирования» Институт физики полупроводников

More information

USING THE GENSYS SOFTWARE FOR RAILWAY VEHICLE MODELING

USING 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 information

IoT Security Platform

IoT 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 information

Student Outcomes. Lesson Notes. Classwork. Example 2 (3 minutes)

Student 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";

$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 information

Jsonb «smart» indexing. Parametrized opclasses

Jsonb «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 information

Math-Net.Ru All Russian mathematical portal

Math-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 information

HIGH-QUALITY HARDWARE ACCELERATED VISUALIZATION OF PARTICULATE MATERIALS

HIGH-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 - 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

(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 information

Analysis System of Scientific Publications Based on the Ontology Approach

Analysis 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 от Приложение IRC 117 E от 29.06.2010 Предварительные пояснения. Устройство Обозначение устройства Доступные коды пульта IRC 117 E Телевизоры TV, TV/VCR, TV/AUX 101-102 CD, DVD проигрыватели AUX, TV/AUX 301-328

More information

XML Model for Legal Documents

XML Model for Legal Documents БЪЛГАРСКА АКАДЕМИЯ НА НАУКИТЕ. BULGARIAN ACADEMY OF SCIENCES ПРОБЛЕМИ НА ТЕХНИЧЕСКАТА КИБЕРНЕТИКА И РОБОТИКАТА, 54 PROBLEMS OF ENGINEERING CYBERNETICS AND ROBOTICS, 54 София. 2004. Sofia XML Model for

More information

Visual Quality Increasing using Image Parts Improvement for Fractal Image Compression

Visual 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 information

Collateral damage of Internet content blocking. ENOG14, Samorukov, Netart Group, Isavnin, Internet Protection Society

Collateral 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 information

USER MANUAL(GB)...P03 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ(RU)...P08 CMY

USER 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 information

FULL GUIDANCE AND TUTORIAL: HOW TO MAKE A DIY SELFIEBOT

FULL 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 information

Vk cloud mail ru links

Vk 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 information

DSL-2640U Wireless ADSL2/2+ 4-port

DSL-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 information

Math-Net.Ru All Russian mathematical portal

Math-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 information

Approach on Applications of Random High Data Flows Concerning the Architecture of Computer Networks

Approach 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# и Демо презентации: https://github.com/object/ AkkaStreamsDemo Консультант в Miles Работаю с F# и C# @ooobject vagif.abilov@mail.com Демо презентации: https://github.com/object/ AkkaStreamsDemo У вас уже может быть опыт работы с...для понимания этого доклада он необязателен!

More information

Как развернуть кампусную сеть Cisco за 10 минут? Новые технологии для автоматизации и аналитики в корпоративных сетях Cisco.

Как развернуть кампусную сеть 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 information

Higher Order Perl. Finlay Thompson. 14 March 2006

Higher 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 information

Math-Net.Ru All Russian mathematical portal

Math-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